#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define maxn 1005
#define mi LLONG_MIN
#define ma LLONG_MAX
#define mod 1000000007
#define pb push_back
#define S second
#define F first
vector<int> p(maxn), sz(maxn);
int get(int x) { return (p[x] == x ? p[x] : p[x] = get(p[x])); }
bool merge(int x, int y) {
x = get(x);
y = get(y);
if (x == y) return 0;
if (sz[x] < sz[y]) swap(x, y);
sz[x] += sz[y];
p[y] = x;
return 1;
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
p[i] = i;
sz[i] = 1;
}
vector<pair<int, pair<int, int>>> g;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
u--;
v--;
g.pb({a[v] + a[u], {u, v}});
}
vector<int> sums, ans;
sort(g.begin(), g.end());
int sum = 0;
int cnt = 0;
sums.pb(sum);
ans.pb(cnt);
vector<int> act(n, 0);
for (int i = 0; i < m; i++) {
int w = g[i].F, u = g[i].S.F, v = g[i].S.S;
if (merge(u, v)) {
sum += w;
cnt += (act[u] == 0) + (act[v] == 0);
sums.pb(sum);
ans.pb(cnt);
int cng = 0;
if (act[u] == 0) {
for (int j = i + 1; j < m; j++) {
if (g[j].S.S == u || g[j].S.F == u) {
g[j].F -= a[u];
}
}
cng = 1;
}
if (act[v] == 0) {
for (int j = i + 1; j < m; j++) {
if (g[j].S.S == v || g[j].S.F == v) {
g[j].F -= a[v];
}
}
cng = 1;
}
if (cng == 1) {
sort(g.begin() + i + 1, g.end());
}
act[u] = 1;
act[v] = 1;
}
}
int q;
cin >> q;
while (q--) {
int x;
cin >> x;
int idx = lower_bound(sums.begin(), sums.end(), x) - sums.begin();
if (idx == sums.size() || sums[idx] > x) {
idx--;
}
if (idx < 0) idx = 0;
cout << ans[idx] << endl;
}
}