#include<bits/stdc++.h>
#define ms(__x__,__val__) memset(__x__, __val__, sizeof(__x__))
#define FI(__x__,__y__) for(int i=__x__;i<__y__;i++)
#define pb(__x__) push_back(__x__)
using namespace std;
typedef long long ll;
const ll INF = 1e18 + 10;
const int maxn = 2e5 + 5;
int dep[maxn];
int vis[maxn];
int len;
int n,k;
vector<int> G[maxn];
void dfs(int pos,int fa,int depth){
dep[pos] = depth;
for(auto p : G[pos]){
if(p == fa) continue;
dfs(p,pos,depth + 1);
vis[pos] |= vis[p]; // 核心重点 不断传染父节点
if(vis[p]) len += 2;
}
}
signed main()
{
IOS;
int _;
cin>>_;
while(_--){
int S,D;
cin>>n>>k>>S>>D;
FI(0,n+1) dep[i] = 0,vis[i] = 0,G[i].clear();
len = 0;
vis[D] = 1;
FI(0,k){
int x;
cin>>x;
vis[x] = 1;
}
FI(0,n-1){
int x,y;
cin>>x>>y;
G[x].pb(y);
G[y].pb(x);
}
dfs(S,0,0);
cout<<len - dep[D]<<"\n";
}
}