#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
const int mxn=1e6+7;
int n,q,dd[mxn],check[mxn],res[mxn],dp[mxn];
typedef pair<int,int>ii;
vector<int>val;
int query[mxn],a[mxn];
vector<int>g[mxn];
vector<int>team[mxn];
int dfs(int u,int p)
{
check[u]=true;
int res=1;
for(auto v:g[u])
{
if(v!=p&&!check[v]&&dd[v])
{
res=res*((dfs(v,u)+1)%mod)%mod;
}
}
dp[u]=res;
return res;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
val.push_back(a[i]);
}
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>query[i];
val.push_back(query[i]);
}
sort(val.begin(),val.end());
val.resize(unique(val.begin(),val.end())-val.begin());
for(int i=1;i<=n;i++){
a[i]=lower_bound(val.begin(),val.end(),a[i])-val.begin()+1;
team[a[i]].push_back(i);
}
for(int i=1;i<=q;i++)
query[i]=lower_bound(val.begin(),val.end(),query[i])-val.begin()+1;
int prev=0;
for(int v=val.size()-1;v>=0;v--)
{
int t=v+1;
if(!team[t].empty())
{
int sum=0;
for(auto u:team[t])
{
dd[u]=true;
}
for(int i=1;i<=n;i++)
{
check[i]=false;
dp[i]=0;
}
for(int i=1;i<=n;i++)
{
if(!check[i]&&dd[i])
{
dfs(i,i);
}
}
for(int i=1;i<=n;i++)
sum=(sum+dp[i])%mod;
res[t]=((sum-prev)%mod+mod)%mod;
prev=sum;
}
}
for(int i=1;i<=q;i++)
cout<<res[query[i]]<<"\n";
return 0;
}
/*
4
2 4 3 1
4 3
4 2
4 1
4
1
2
3
4
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGludCBsb25nIGxvbmcKCmNvbnN0IGludCBtb2Q9MWU5Kzc7CmNvbnN0IGludCBteG49MWU2Kzc7CmludCBuLHEsZGRbbXhuXSxjaGVja1tteG5dLHJlc1tteG5dLGRwW214bl07CnR5cGVkZWYgcGFpcjxpbnQsaW50PmlpOwp2ZWN0b3I8aW50PnZhbDsKaW50IHF1ZXJ5W214bl0sYVtteG5dOwp2ZWN0b3I8aW50PmdbbXhuXTsKdmVjdG9yPGludD50ZWFtW214bl07CmludCBkZnMoaW50IHUsaW50IHApCnsKICAgIGNoZWNrW3VdPXRydWU7CiAgICBpbnQgcmVzPTE7CiAgICBmb3IoYXV0byB2OmdbdV0pCiAgICB7CiAgICAgICAgaWYodiE9cCYmIWNoZWNrW3ZdJiZkZFt2XSkKICAgICAgICB7CiAgICAgICAgICAgIHJlcz1yZXMqKChkZnModix1KSsxKSVtb2QpJW1vZDsKICAgICAgICB9CiAgICB9CiAgICBkcFt1XT1yZXM7CiAgICByZXR1cm4gcmVzOwp9CnNpZ25lZCBtYWluKCkKewogICAgY2luPj5uOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICB7CiAgICAgICAgY2luPj5hW2ldOwogICAgICAgIHZhbC5wdXNoX2JhY2soYVtpXSk7CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKQogICAgewogICAgICAgIGludCB1LHY7CiAgICAgICAgY2luPj51Pj52OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgY2luPj5xOwogICAgZm9yKGludCBpPTE7aTw9cTtpKyspCiAgICB7CiAgICAgICAgY2luPj5xdWVyeVtpXTsKICAgICAgICB2YWwucHVzaF9iYWNrKHF1ZXJ5W2ldKTsKICAgIH0KICAgIHNvcnQodmFsLmJlZ2luKCksdmFsLmVuZCgpKTsKICAgIHZhbC5yZXNpemUodW5pcXVlKHZhbC5iZWdpbigpLHZhbC5lbmQoKSktdmFsLmJlZ2luKCkpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGFbaV09bG93ZXJfYm91bmQodmFsLmJlZ2luKCksdmFsLmVuZCgpLGFbaV0pLXZhbC5iZWdpbigpKzE7CiAgICAgICAgdGVhbVthW2ldXS5wdXNoX2JhY2soaSk7CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1xO2krKykKICAgICAgICBxdWVyeVtpXT1sb3dlcl9ib3VuZCh2YWwuYmVnaW4oKSx2YWwuZW5kKCkscXVlcnlbaV0pLXZhbC5iZWdpbigpKzE7CiAgICBpbnQgcHJldj0wOwogICAgZm9yKGludCB2PXZhbC5zaXplKCktMTt2Pj0wO3YtLSkKICAgIHsKICAgICAgICBpbnQgdD12KzE7CiAgICAgICAgaWYoIXRlYW1bdF0uZW1wdHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBzdW09MDsKICAgICAgICAgICAgZm9yKGF1dG8gdTp0ZWFtW3RdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZFt1XT10cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGVja1tpXT1mYWxzZTsKICAgICAgICAgICAgICAgIGRwW2ldPTA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCFjaGVja1tpXSYmZGRbaV0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZGZzKGksaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICAgICAgICAgICAgICBzdW09KHN1bStkcFtpXSklbW9kOwogICAgICAgICAgICByZXNbdF09KChzdW0tcHJldiklbW9kK21vZCklbW9kOwogICAgICAgICAgICBwcmV2PXN1bTsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1xO2krKykKICAgICAgICBjb3V0PDxyZXNbcXVlcnlbaV1dPDwiXG4iOwogICAgcmV0dXJuIDA7Cn0KLyoKNAoyIDQgMyAxCjQgMwo0IDIKNCAxCjQKMQoyCjMKNAoqLwo=