#include<bits/stdc++.h>
using namespace std;
inline int rd(){
char c=getchar();int s=0;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) s=s*10+c-48,c=getchar();
return s;
}
const int p=1e9+7,N=100005;
int n,k,i,x,y,tot=1,lst[N],tmp[3],a[N],b[N],iv[N],cnt[N];
bool vis[N];
struct edg{
int y,n;
}d[N<<1];
void cun(int x,int y){d[++tot]=edg{y,lst[x]};lst[x]=tot;}
int f[N][3];
void dfs(int x,int fa){
f[x][0]=1,f[x][1]=f[x][2]=0;int u=iv[cnt[x]];
for(int j=lst[x];j;j=d[j].n)
if(j^fa^1){
dfs(d[j].y,j);
f[x][2]=(1ll*f[x][2]*f[d[j].y][0]+1ll*f[x][1]*f[d[j].y][1]%p*u+1ll*f[x][0]*f[d[j].y][2])%p;
f[x][1]=(1ll*f[x][0]*f[d[j].y][1]+1ll*f[x][1]*f[d[j].y][0])%p;
f[x][0]=1ll*f[x][0]*f[d[j].y][0]%p;
}
int mul=1;
for(int j=1;j<cnt[x];j++) mul=1ll*mul*j%p;
int mul2=1ll*mul*max(cnt[x],1)%p;
f[x][0]=1ll*f[x][0]*mul2%p;
f[x][1]=1ll*f[x][1]*mul%p;
f[x][2]=1ll*f[x][2]*mul2%p;
if(vis[fa>>1]){
f[x][2]=((f[x][2]-f[x][0])%p-f[x][1])%p;
f[x][1]=-f[x][0];
}
}
void mian(){
scanf("%d%d",&n,&k);tot=1;memset(lst,0,sizeof(lst));memset(vis,0,sizeof(vis));
memset(cnt,-1,sizeof(cnt));
for(i=1;i<n;i++) x=rd(),y=rd(),cun(x,y),cun(y,x),cnt[x]++,cnt[y]++;
for(i=1;i<=k;i++) vis[rd()]=1;
dfs(1,0);
printf("%d\n",(p-f[1][2])%p);
}
int main()
{
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
iv[1]=1;
for(i=2;i<=100000;i++) iv[i]=1ll*iv[p%i]*(p-p/i)%p;
int t;scanf("%*d%d",&t);while(t--) mian();
return 0;
}