#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
#define ll long long
ll mod = 998244353;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll binpow(ll a, ll b)
{
ll res = 1;
while (b>0)
{
if (b&1)
res = (res*a)%mod;
a = (a*a)%mod;
b>>=1;
}
return res;
}
ll gcd(ll x, ll y)
{
if (y==0)
return x;
return gcd(y, x%y);
}
ll maxi = 1010;
vector<vector<vector<ll>>>dp(maxi, vector<vector<ll>>(maxi, vector<ll>(3, 1e15)));
vector<vector<ll>>g(maxi);
vector<ll>v(maxi);
vector<ll>vis(maxi, 0), sz(maxi, 0);
void dfs(ll x)
{
vis[x] = 1;
for (auto i:g[x])
{
if (vis[i]==0 and i!=0)
dfs(i);
}
}
void dfs1(ll x, ll p)
{
dp[x][0][1] = v[x];
dp[x][0][0] = 0;
sz[x]++;
for (auto i:g[x])
{
if (i!=p)
{
dfs1(i, x);
vector<vector<ll>>temp = dp[x];
for (int j1=sz[x] ; j1>=0 ; j1--)
{
for (int j2=sz[i] ; j2>=0 ; j2--)
{
temp[j1+j2][0] = min(temp[j1+j2][0], dp[x][j1][0] + min({dp[i][j2][0], dp[i][j2][2]}));
temp[j1+j2][1] = min(temp[j1+j2][1], dp[x][j1][1] + dp[i][j2][0]);
temp[j1+j2+2][2] = min(temp[j1+j2+2][2], dp[x][j1][1] + dp[i][j2][1]);
temp[j1+j2+1][2] = min(temp[j1+j2+1][2], dp[x][j1][1] + dp[i][j2][2]);
temp[j1+j2+1][2] = min(temp[j1+j2+1][2], dp[x][j1][2] + dp[i][j2][1]);
temp[j1+j2][2] = min(temp[j1+j2][2], dp[x][j1][2] + dp[i][j2][0]);
temp[j1+j2][2] = min(temp[j1+j2][2], dp[x][j1][2] + dp[i][j2][2]);
}
}
dp[x] = temp;
sz[x] += sz[i];
}
}
}
void solve()
{
ll n,m;
cin>>n>>m;
for (int i=1 ; i<=n ; i++) cin>>v[i];
for (int i=1 ; i<=m ; i++)
{
ll x,y;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
for (int i=1 ; i<=n ;i++)
{
if (vis[i]==0)
{
dfs(i);
g[0].push_back(i);
}
}
v[0] = 1e15;
dfs1(0, -1);
vector<ll>cst(maxi);
for (int i=0 ; i<maxi ; i++)
cst[i] = dp[0][i][0];
for (int i=maxi-2 ; i>=0 ; i--) cst[i] = min(cst[i], cst[i+1]);
ll q;
cin>>q;
while (q--)
{
ll x;
cin>>x;
ll it = upper_bound(cst.begin(), cst.end(), x) - cst.begin();
it--;
cout<<it<<endl;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll tt = 1;
// cin>>tt;
while (tt--)
{
solve();
}
return 0;
}