#include<bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<b;i++)
#define fe(i,a,b) for(int i=a;i<=b;i++)
#define feh(a,b) for(auto a:b)
#define pb push_back
#define vi vector<int>
#define fast_io ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int MAXN = 1e5 + 1;
struct Node
{
vi ar;
};
Node st[8*MAXN];
vi adj[MAXN];
int col[MAXN];
int fa[2*MAXN];
int s[MAXN];
int e[MAXN];
int N,Q,k,root;
int ql,qr,ind,timer;
void merge(vi& A, vi& B, vi& res)
{
int i=0,j=0;
while(i < A.size() && j < B.size())
{
if (A[i] < B[j])
{
res.pb(A[i]);
i++;
}
else if (A[i] == B[j])
{
if(res.empty() || res[res.size()-1] != A[i])
res.pb(A[i]);
i++;
j++;
}
else
{
res.pb(B[j]);
j++;
}
}
f(k,i,A.size())
{
res.pb(A[k]);
}
f(k,j,B.size())
{
res.pb(B[k]);
}
}
void cst(int l, int r, int ind)
{
if (l == r)
{
st[ind].ar.pb(col[fa[l]]);
// cout << "ind "<<ind<<" ===";
// feh(val,st[ind].ar)
// cout<<val<<" ";
// cout<<"\n";
return;
}
int mid = (l+r)/2;
cst(l,mid,2*ind);
cst(mid+1,r,2*ind+1);
merge(st[2*ind].ar,st[2*ind+1].ar,st[ind].ar);
// cout << "ind "<<ind<<" ===";
// feh(val,st[ind].ar)
// cout<<val<<" ";
// cout<<"\n";
}
void rmq(int l, int r, int ind, vector<int>& res)
{
if(l > qr || r < ql)
{
return ;
}
if(l >= ql && r <= qr)
{
res = st[ind].ar;
return;
}
int mid = (l+r)/2;
vector<int> L,R;
rmq(l,mid,2*ind,L);
rmq(mid+1,r,2*ind+1,R);
merge(L, R, res);
}
void dfs(int v, int par)
{
timer++;
fa[timer] = v;
s[v] = timer;
feh(ver,adj[v])
{
if (ver != par)
{
dfs(ver,v);
}
}
timer++;
fa[timer] = v;
e[v] = timer;
}
int main()
{
fast_io
int u,v;
cin >> N >> Q >> root;
timer = 0;
fe(i,1,N-1)
{
cin >> u >> v;
adj[u].pb(v);
adj[v].pb(u);
}
fe(i,1,N)
{
cin >> col[i];
}
dfs(root, -1);
cst(1,2*N,1);
// fe(i,1,2*N)
// cout <<fa[i]<<" ";
// cout<<"\n";
// fe(i,1,N)
// cout<<s[i]<<" ";
// cout<<"\n";
// fe(i,1,N)
// cout << e[i]<<" ";
// cout<<"\n";
while(Q--)
{
vector<int> res;
cin >> k;
ql = s[k];
qr = e[k];
rmq(1,2*N,1,res);
cout << res.size() <<"\n";
// for(int val:res)
// cout<<val<<" ";
// cout<<"\n";
//cout << res.size() <<"\n";
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmKGksYSxiKSBmb3IoaW50IGk9YTtpPGI7aSsrKQojZGVmaW5lIGZlKGksYSxiKSBmb3IoaW50IGk9YTtpPD1iO2krKykKI2RlZmluZSBmZWgoYSxiKSBmb3IoYXV0byBhOmIpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgdmkgdmVjdG9yPGludD4gCiNkZWZpbmUgZmFzdF9pbyAgICAgICAgICAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDFlNSArIDE7CgpzdHJ1Y3QgTm9kZQp7CiAgICB2aSBhcjsKfTsKCk5vZGUgc3RbOCpNQVhOXTsKdmkgYWRqW01BWE5dOwppbnQgY29sW01BWE5dOwppbnQgZmFbMipNQVhOXTsKaW50IHNbTUFYTl07CmludCBlW01BWE5dOwppbnQgTixRLGsscm9vdDsKaW50IHFsLHFyLGluZCx0aW1lcjsKCnZvaWQgbWVyZ2UodmkmIEEsIHZpJiBCLCB2aSYgcmVzKQp7CiAgICBpbnQgaT0wLGo9MDsKICAgIHdoaWxlKGkgPCBBLnNpemUoKSAmJiBqIDwgQi5zaXplKCkpCiAgICB7CiAgICAgICAgaWYgKEFbaV0gPCBCW2pdKSAKICAgICAgICB7CiAgICAgICAgICAgIHJlcy5wYihBW2ldKTsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChBW2ldID09IEJbal0pCiAgICAgICAgewogICAgICAgICAgICBpZihyZXMuZW1wdHkoKSB8fCByZXNbcmVzLnNpemUoKS0xXSAhPSBBW2ldKQogICAgICAgICAgICAgICAgcmVzLnBiKEFbaV0pOwogICAgICAgIAogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmVzLnBiKEJbal0pOwogICAgICAgICAgICBqKys7CiAgICAgICAgfQogICAgfQoKICAgIGYoayxpLEEuc2l6ZSgpKQogICAgewogICAgICAgIHJlcy5wYihBW2tdKTsgCiAgICB9CiAgICAKICAgIGYoayxqLEIuc2l6ZSgpKQogICAgewogICAgICAgIHJlcy5wYihCW2tdKTsgCiAgICB9Cn0KCnZvaWQgY3N0KGludCBsLCBpbnQgciwgaW50IGluZCkKewogICAgaWYgKGwgPT0gcikKICAgIHsKICAgICAgICBzdFtpbmRdLmFyLnBiKGNvbFtmYVtsXV0pOwogICAgICAgIC8vIGNvdXQgPDwgImluZCAiPDxpbmQ8PCIgPT09IjsKICAgIAogICAgICAgIC8vIGZlaCh2YWwsc3RbaW5kXS5hcikKICAgICAgICAvLyAgICAgY291dDw8dmFsPDwiICI7CgogICAgICAgIC8vIGNvdXQ8PCJcbiI7CiAgICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaW50IG1pZCA9IChsK3IpLzI7CgogICAgY3N0KGwsbWlkLDIqaW5kKTsKICAgIGNzdChtaWQrMSxyLDIqaW5kKzEpOwoKICAgIG1lcmdlKHN0WzIqaW5kXS5hcixzdFsyKmluZCsxXS5hcixzdFtpbmRdLmFyKTsKICAgIAogICAgLy8gY291dCA8PCAiaW5kICI8PGluZDw8IiA9PT0iOwogICAgCiAgICAvLyBmZWgodmFsLHN0W2luZF0uYXIpCiAgICAvLyAgICAgY291dDw8dmFsPDwiICI7CgogICAgLy8gY291dDw8IlxuIjsKfQoKdm9pZCBybXEoaW50IGwsIGludCByLCBpbnQgaW5kLCB2ZWN0b3I8aW50PiYgcmVzKQp7CiAgICBpZihsID4gcXIgfHwgciA8IHFsKQogICAgewogICAgICAgIHJldHVybiA7CiAgICB9CgogICAgaWYobCA+PSBxbCAmJiByIDw9IHFyKQogICAgewogICAgICAgIHJlcyA9IHN0W2luZF0uYXI7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBtaWQgPSAobCtyKS8yOwogICAgCiAgICB2ZWN0b3I8aW50PiBMLFI7CiAgICBybXEobCxtaWQsMippbmQsTCk7CiAgICBybXEobWlkKzEsciwyKmluZCsxLFIpOyAKICAgIG1lcmdlKEwsIFIsIHJlcyk7Cn0KCnZvaWQgZGZzKGludCB2LCBpbnQgcGFyKQp7CiAgICB0aW1lcisrOwogICAgZmFbdGltZXJdID0gdjsKICAgIHNbdl0gPSB0aW1lcjsKICAgCiAgICBmZWgodmVyLGFkalt2XSkKICAgIHsKICAgICAgICBpZiAodmVyICE9IHBhcikKICAgICAgICB7CiAgICAgICAgICAgIGRmcyh2ZXIsdik7CiAgICAgICAgfQogICAgfQoKICAgIHRpbWVyKys7CiAgICBmYVt0aW1lcl0gPSB2OwogICAgZVt2XSA9IHRpbWVyOwp9CgppbnQgbWFpbigpCnsKICAgIGZhc3RfaW8KICAgIGludCB1LHY7CiAgICBjaW4gPj4gTiA+PiBRID4+IHJvb3Q7CiAgICB0aW1lciA9IDA7CiAgICBmZShpLDEsTi0xKQogICAgewogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnBiKHYpOwogICAgICAgIGFkalt2XS5wYih1KTsgCiAgICB9CiAgICAKICAgIGZlKGksMSxOKQogICAgewogICAgICAgIGNpbiA+PiBjb2xbaV07CiAgICB9CgogICAgZGZzKHJvb3QsIC0xKTsKCiAgICBjc3QoMSwyKk4sMSk7CgogICAgLy8gZmUoaSwxLDIqTikKICAgIC8vICAgIGNvdXQgPDxmYVtpXTw8IiAiOwogICAgCiAgICAvLyBjb3V0PDwiXG4iOyAKICAgIAogICAgLy8gZmUoaSwxLE4pCiAgICAvLyAgICBjb3V0PDxzW2ldPDwiICI7CiAgICAKICAgIC8vIGNvdXQ8PCJcbiI7CiAgICAKICAgIC8vIGZlKGksMSxOKQogICAgLy8gICAgY291dCA8PCBlW2ldPDwiICI7CiAgICAKICAgIC8vIGNvdXQ8PCJcbiI7CgogICAgd2hpbGUoUS0tKQogICAgewogICAgICAgIHZlY3RvcjxpbnQ+IHJlczsKICAgICAgICBjaW4gPj4gazsKICAgICAgICBxbCA9IHNba107CiAgICAgICAgcXIgPSBlW2tdOwogICAgICAgIHJtcSgxLDIqTiwxLHJlcyk7CiAgICAgICAgY291dCA8PCByZXMuc2l6ZSgpIDw8IlxuIjsKICAgICAgICAvLyBmb3IoaW50IHZhbDpyZXMpCiAgICAgICAgLy8gICAgY291dDw8dmFsPDwiICI7CiAgICAgICAgLy8gICAgY291dDw8IlxuIjsKICAgICAgICAvL2NvdXQgPDwgcmVzLnNpemUoKSA8PCJcbiI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K