#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int mod = 998'244'353;
constexpr int add(int a, int b) {
return a + b < mod ? a + b : a + b - mod;
}
constexpr int sub(int a, int b) {
return a < b ? a - b + mod : a - b;
}
constexpr int mul(int a, int b) {
return i64(a) * b % mod;
}
constexpr int pow(int x, int n) {
int ret = 1;
for (; n; n >>= 1) {
if (n & 1) ret = mul(ret, x);
x = mul(x, x);
}
return ret;
}
auto sol = [](int n, int m, int q, auto v, auto adj, auto qs) {
vector c1(n + 1, false);
vector c2(n + 1, false);
c1[1] = true;
c2[2] = true;
for (int i : adj[1]) c1[i] = true;
for (int i : adj[2]) c2[i] = true;
vector dp1(n + 1, 0);
vector dp2(n + 1, 0);
vector dp3(n + 1, 0);
dp1[0] = 1;
dp2[0] = 1;
dp3[0] = 1;
for (int i = 1; i <= n; i++) {
if (c1[i] && c2[i]) {
vector ndp(n + 1, 0);
for (int x = 0; x <= n - 1; x++) {
ndp[x] = add(ndp[x], mul(dp3[x], sub(1, v[i])));
ndp[x + 1] = add(ndp[x + 1], mul(dp3[x], v[i]));
}
dp3.swap(ndp);
}
else if (c1[i]) {
vector ndp(n + 1, 0);
for (int x = 0; x <= n - 1; x++) {
ndp[x] = add(ndp[x], mul(dp1[x], sub(1, v[i])));
ndp[x + 1] = add(ndp[x + 1], mul(dp1[x], v[i]));
}
dp1.swap(ndp);
}
else if (c2[i]) {
vector ndp(n + 1, 0);
for (int x = 0; x <= n - 1; x++) {
ndp[x] = add(ndp[x], mul(dp2[x], sub(1, v[i])));
ndp[x + 1] = add(ndp[x + 1], mul(dp2[x], v[i]));
}
dp2.swap(ndp);
}
}
auto calc = [&](int x, int y) {
int ret = 0;
for (int i = 0; i <= n; i++) {
if (i > x || i > y) break;
int val = mul(dp1[x - i], dp2[y - i]);
val = mul(val, dp3[i]);
ret = add(ret, val);
}
return ret;
};
vector ret(q, 0);
for (int i = 0; i < q; i++) {
auto [x, y] = qs[i];
ret[i] = calc(x, y);
}
return ret;
};
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, m, q; cin >> n >> m >> q;
vector v(n + 1, 0);
vector adj(n + 1, vector(0, 0));
vector qs(q, array{ 0, 0 });
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
for (int i = 0; i < m; i++) {
int a, b; cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for (int i = 0; i < q; i++) {
cin >> qs[i][0] >> qs[i][1];
}
auto res = sol(n, m, q, v, adj, qs);
for (int i = 0; i < q; i++) {
cout << res[i] << '\n';
}
}