#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define mk make_pair
#define pb push_back
#define INF (ll)1e18
#define pll pair<ll, ll>
#define vll vector<ll>
#define vii vector<int>
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
#define dpp(arr, val) memset(arr, val, sizeof(arr))
#define isON(n, k) (((n) >> (k)) & 1)
#define f(i, a, b) for (ll i = a; i < b; i++)
#define fb(i, a, b) for (ll i = a; i > b; i--)
#define ff first
#define ss second
#define PI 3.141592653589793238
// int dx[8] = { 1, 0, -1, 0, -1, 1, -1, 1 };
// int dy[8] = { 0, 1, 0, -1, -1, 1, 1, -1 };
using namespace std;
const int N = 2e5 + 5;
const ll MOD = 1e9 + 7;
ll t = 1;
int n, l;
vector<vector<ll>> adj;
vll a;
vector<int> depth;
vector<bitset<251>> ans;
vector<vector<int>> up;
void dfs(int v, int p)
{
depth[v] = (v == p) ? 0 : depth[p] + 1;
up[v][0] = p;
for (int i = 1; i <= l; ++i)
up[v][i] = up[up[v][i - 1]][i - 1];
for (int u : adj[v])
{
if (u != p){
dfs(u, v);
ans[v] |= ans[u];
}
}
}
int lca(int u, int v)
{
if (depth[u] < depth[v])
swap(u, v);
int k = depth[u] - depth[v];
for (int j = 0; j < l; j++)
{
if (k & (1LL << j))
{
u = up[u][j];
}
}
if (u == v)
return u;
for (int j = l; j >= 0; j--)
{
if (up[u][j] != up[v][j])
{
u = up[u][j];
v = up[v][j];
}
}
return up[u][0];
}
void preprocess(int root)
{
depth.resize(n + 1);
l = ceil(log2(n)) + 1;
up.assign(n + 1, vector<int>(l + 1));
dfs(root, root);
}
void solve()
{
ll q, root;
cin >> n >> q >> root;
ans = vector<bitset<251>>(n + 1);
adj = vector<vll>(n + 1);
a = vll(n + 1);
f(i, 0, n) {
cin >> a[i];
ans[i].reset();
ans[i].set(a[i]);
}
f(i, 0, n - 1)
{
ll x, y;
cin >> x >> y;
adj[x].pb(y);
adj[y].pb(x);
}
preprocess(root);
while (q--)
{
ll x, y;
cin >> x >> y;
x = lca(x, y);
cout << ans[x].count() << endl;
}
return;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> t;
while (t--)
{
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbWsgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgSU5GIChsbCkxZTE4CiNkZWZpbmUgcGxsIHBhaXI8bGwsIGxsPgojZGVmaW5lIHZsbCB2ZWN0b3I8bGw+CiNkZWZpbmUgdmlpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIGFsbHIoeCkgeC5yYmVnaW4oKSwgeC5yZW5kKCkKI2RlZmluZSBkcHAoYXJyLCB2YWwpIG1lbXNldChhcnIsIHZhbCwgc2l6ZW9mKGFycikpCiNkZWZpbmUgaXNPTihuLCBrKSAoKChuKSA+PiAoaykpICYgMSkKI2RlZmluZSBmKGksIGEsIGIpIGZvciAobGwgaSA9IGE7IGkgPCBiOyBpKyspCiNkZWZpbmUgZmIoaSwgYSwgYikgZm9yIChsbCBpID0gYTsgaSA+IGI7IGktLSkKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMjM4Ci8vIGludCBkeFs4XSA9IHsgMSwgMCwgLTEsIDAsIC0xLCAxLCAtMSwgMSB9OwovLyBpbnQgZHlbOF0gPSB7IDAsIDEsIDAsIC0xLCAtMSwgMSwgMSwgLTEgfTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE4gPSAyZTUgKyA1Owpjb25zdCBsbCBNT0QgPSAxZTkgKyA3OwpsbCB0ID0gMTsKaW50IG4sIGw7CnZlY3Rvcjx2ZWN0b3I8bGw+PiBhZGo7CnZsbCBhOwoKdmVjdG9yPGludD4gZGVwdGg7CnZlY3RvcjxiaXRzZXQ8MjUxPj4gYW5zOwp2ZWN0b3I8dmVjdG9yPGludD4+IHVwOwoKdm9pZCBkZnMoaW50IHYsIGludCBwKQp7CiAgICBkZXB0aFt2XSA9ICh2ID09IHApID8gMCA6IGRlcHRoW3BdICsgMTsKICAgIHVwW3ZdWzBdID0gcDsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBsOyArK2kpCiAgICAgICAgdXBbdl1baV0gPSB1cFt1cFt2XVtpIC0gMV1dW2kgLSAxXTsKCiAgICBmb3IgKGludCB1IDogYWRqW3ZdKQogICAgewogICAgICAgIGlmICh1ICE9IHApewogICAgICAgICAgICBkZnModSwgdik7CiAgICAgICAgICAgIGFuc1t2XSB8PSBhbnNbdV07CiAgICAgICAgfQogICAgfQp9CgppbnQgbGNhKGludCB1LCBpbnQgdikKewogICAgaWYgKGRlcHRoW3VdIDwgZGVwdGhbdl0pCiAgICAgICAgc3dhcCh1LCB2KTsKICAgIGludCBrID0gZGVwdGhbdV0gLSBkZXB0aFt2XTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgbDsgaisrKQogICAgewogICAgICAgIGlmIChrICYgKDFMTCA8PCBqKSkKICAgICAgICB7CiAgICAgICAgICAgIHUgPSB1cFt1XVtqXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAodSA9PSB2KQogICAgICAgIHJldHVybiB1OwogICAgZm9yIChpbnQgaiA9IGw7IGogPj0gMDsgai0tKQogICAgewogICAgICAgIGlmICh1cFt1XVtqXSAhPSB1cFt2XVtqXSkKICAgICAgICB7CiAgICAgICAgICAgIHUgPSB1cFt1XVtqXTsKICAgICAgICAgICAgdiA9IHVwW3ZdW2pdOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB1cFt1XVswXTsKfQoKdm9pZCBwcmVwcm9jZXNzKGludCByb290KQp7CiAgICBkZXB0aC5yZXNpemUobiArIDEpOwogICAgbCA9IGNlaWwobG9nMihuKSkgKyAxOwogICAgdXAuYXNzaWduKG4gKyAxLCB2ZWN0b3I8aW50PihsICsgMSkpOwogICAgZGZzKHJvb3QsIHJvb3QpOwp9Cgp2b2lkIHNvbHZlKCkKewogICAgbGwgcSwgcm9vdDsKICAgIGNpbiA+PiBuID4+IHEgPj4gcm9vdDsKICAgIGFucyA9IHZlY3RvcjxiaXRzZXQ8MjUxPj4obiArIDEpOwogICAgYWRqID0gdmVjdG9yPHZsbD4obiArIDEpOwogICAgYSA9IHZsbChuICsgMSk7CgogICAgZihpLCAwLCBuKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgYW5zW2ldLnJlc2V0KCk7CiAgICAgICAgYW5zW2ldLnNldChhW2ldKTsKICAgIH0KICAgIGYoaSwgMCwgbiAtIDEpCiAgICB7CiAgICAgICAgbGwgeCwgeTsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIGFkalt4XS5wYih5KTsKICAgICAgICBhZGpbeV0ucGIoeCk7CiAgICB9CiAgICBwcmVwcm9jZXNzKHJvb3QpOwogICAgd2hpbGUgKHEtLSkKICAgIHsKICAgICAgICBsbCB4LCB5OwogICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgeCA9IGxjYSh4LCB5KTsKICAgICAgICBjb3V0IDw8IGFuc1t4XS5jb3VudCgpIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CgogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=