#include <bits/stdc++.h>
#define ll long long
#define sti string
#define bit(n,i) ((n>>i) &1)
#define itachi ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define maxn 210000
#define fi first
#define se second
using namespace std;
vector<int> adj[maxn];
ll color[maxn],n,q,ans[maxn],bit[maxn],r;
pair<pair<ll,ll>,ll> query[maxn];
int in[maxn],out[maxn],euler[2*maxn],cnt=0;
void dfs(int u,int p){
in[u]=++cnt;
euler[cnt]=color[u];
for(int v : adj[u]){
if(v!=p) dfs(v,u);
}
out[u]=cnt;
}
void update(int pos,int val){
for(; pos<maxn;pos += pos & -pos) bit[pos]+=val;
}
bool cmp(pair<pair<ll,ll>,ll> c,pair<pair<ll,ll>,ll> d){
return c.fi.fi>d.fi.fi;
}
ll get(ll pos){
ll res=0;
for(;pos>0; pos-=pos&-pos){
res+=bit[pos];
}
return res;
}
int main()
{
itachi
freopen("coltree.inp","r",stdin);
freopen("coltree.out","w",stdout);
cin>>n>>q>>r;
for(int i=1;i<n;i++){
int u,v; cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i=1;i<=n;i++) cin>>color[i];
dfs(r,-1);
for(int i=1;i<=q;i++){
int s; cin>>s;
query[i]=make_pair(make_pair(in[s],out[s]),i);
}
sort(query+1,query+q+1,cmp);
unordered_map<ll,ll> last;
int cur=1;
for(int i=1;i<=cnt;i++) bit[i]=0;
for(int i=cnt;i>=1;i--){
ll col=euler[i];
if(last.count(col)) update(last[col],-1);
update(i,1);
last[col]=i;
while(cur<=q && query[cur].fi.fi ==i){
int l=query[cur].fi.fi;
int r=query[cur].fi.se;
int id=query[cur].se;
ans[id]=get(r)-get(l-1);
++cur;
}
}
for(int i=1;i<=q;i++) cout<<ans[i]<<'\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgc3RpIHN0cmluZwojZGVmaW5lIGJpdChuLGkpICgobj4+aSkgJjEpCiNkZWZpbmUgaXRhY2hpIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBtYXhuIDIxMDAwMAojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvcjxpbnQ+IGFkalttYXhuXTsKbGwgY29sb3JbbWF4bl0sbixxLGFuc1ttYXhuXSxiaXRbbWF4bl0scjsKcGFpcjxwYWlyPGxsLGxsPixsbD4gcXVlcnlbbWF4bl07CmludCBpblttYXhuXSxvdXRbbWF4bl0sZXVsZXJbMiptYXhuXSxjbnQ9MDsKdm9pZCBkZnMoaW50IHUsaW50IHApewogICBpblt1XT0rK2NudDsKICAgZXVsZXJbY250XT1jb2xvclt1XTsKICAgZm9yKGludCB2IDogYWRqW3VdKXsKICAgICAgaWYodiE9cCkgZGZzKHYsdSk7CiAgIH0KICAgb3V0W3VdPWNudDsKfQp2b2lkIHVwZGF0ZShpbnQgcG9zLGludCB2YWwpewogICBmb3IoOyBwb3M8bWF4bjtwb3MgKz0gcG9zICYgLXBvcykgYml0W3Bvc10rPXZhbDsKfQpib29sIGNtcChwYWlyPHBhaXI8bGwsbGw+LGxsPiBjLHBhaXI8cGFpcjxsbCxsbD4sbGw+IGQpewogICAgcmV0dXJuIGMuZmkuZmk+ZC5maS5maTsKfQpsbCBnZXQobGwgcG9zKXsKICAgbGwgcmVzPTA7CiAgIGZvcig7cG9zPjA7IHBvcy09cG9zJi1wb3MpewogICAgICByZXMrPWJpdFtwb3NdOwogICB9CiAgIHJldHVybiByZXM7Cn0KaW50IG1haW4oKQp7CiAgICBpdGFjaGkKICAgIGZyZW9wZW4oImNvbHRyZWUuaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigiY29sdHJlZS5vdXQiLCJ3IixzdGRvdXQpOwogICAgY2luPj5uPj5xPj5yOwogICAgZm9yKGludCBpPTE7aTxuO2krKyl7CiAgICAgICAgaW50IHUsdjsgY2luPj51Pj52OwogICAgICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBjaW4+PmNvbG9yW2ldOwogICAgZGZzKHIsLTEpOwogICAgZm9yKGludCBpPTE7aTw9cTtpKyspewogICAgICAgIGludCBzOyBjaW4+PnM7CiAgICAgICAgcXVlcnlbaV09bWFrZV9wYWlyKG1ha2VfcGFpcihpbltzXSxvdXRbc10pLGkpOwogICAgfQogICAgc29ydChxdWVyeSsxLHF1ZXJ5K3ErMSxjbXApOwogICAgdW5vcmRlcmVkX21hcDxsbCxsbD4gbGFzdDsKICAgIGludCBjdXI9MTsKICAgIGZvcihpbnQgaT0xO2k8PWNudDtpKyspIGJpdFtpXT0wOwogICAgZm9yKGludCBpPWNudDtpPj0xO2ktLSl7CiAgICAgICAgbGwgY29sPWV1bGVyW2ldOwogICAgICAgIGlmKGxhc3QuY291bnQoY29sKSkgdXBkYXRlKGxhc3RbY29sXSwtMSk7CiAgICAgICAgdXBkYXRlKGksMSk7CiAgICAgICAgbGFzdFtjb2xdPWk7CiAgICAgICAgd2hpbGUoY3VyPD1xICYmIHF1ZXJ5W2N1cl0uZmkuZmkgPT1pKXsKICAgICAgICAgICAgaW50IGw9cXVlcnlbY3VyXS5maS5maTsKICAgICAgICAgICAgaW50IHI9cXVlcnlbY3VyXS5maS5zZTsKICAgICAgICAgICAgaW50IGlkPXF1ZXJ5W2N1cl0uc2U7CiAgICAgICAgICAgIGFuc1tpZF09Z2V0KHIpLWdldChsLTEpOwogICAgICAgICAgICArK2N1cjsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGk9MTtpPD1xO2krKykgY291dDw8YW5zW2ldPDwnXG4nOwogICAgcmV0dXJuIDA7Cn0K