#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10,mod=1e9+7,inv2=(mod+1)/2;
int n,k,C,T,fac[maxn],ifac[maxn],inv[maxn],f[maxn],invf[maxn],dp[maxn],ans[maxn],e1[maxn],e2[maxn],rson[maxn];
int vis[maxn];
int ksm(int b,int p)
{
	int ret=1;
	while(p)
	{
		if(p&1)ret=1ll*ret*b%mod;
		b=1ll*b*b%mod;p>>=1;
	}
	return ret;
}
vector<int> G[maxn];
int cnt[maxn];
int son[maxn];
void predfs(int u,int fa)
{
	//cout<<u<<'\n';
	for(int v:G[u])
		if(v!=fa)
		{
			predfs(v,u);
			son[u]++;
		}
}
void dfs1(int u,int fa)
{
	if(fa)dp[u]=fac[son[u]];
	else dp[u]=fac[son[u]-1];
	for(int v:G[u])
		if(v!=fa)
		{
			dfs1(v,u);
			dp[u]=1ll*dp[u]*dp[v]%mod;
		}
//	cout<<u<<' '<<dp[u]<<'\n';
}
void dfs2(int u,int fa)
{
	rson[u]=son[u];
	ans[u]=dp[u];
	for(int v:G[u])
		if(v!=fa)
		{
			dp[u]=1ll*dp[u]*ifac[son[u]-1]%mod;
			dp[u]=1ll*dp[u]*ksm(dp[v],mod-2)%mod;
			dp[v]=1ll*dp[v]*ifac[son[v]]%mod;
			son[u]--;
			son[v]++;
			dp[u]=1ll*dp[u]*fac[son[u]]%mod;
			dp[v]=1ll*dp[v]*fac[son[v]-1]%mod;
			dp[v]=1ll*dp[v]*dp[u]%mod;
		//	cout<<"!"<<u<<' '<<v<<' '<<dp[u]<<' '<<dp[v]<<'\n';
			dfs2(v,u);
			dp[v]=1ll*dp[v]*ksm(dp[u],mod-2)%mod;
			dp[v]=1ll*dp[v]*ifac[son[v]-1]%mod;
			dp[u]=1ll*dp[u]*ifac[son[u]]%mod;
			son[v]--;
			son[u]++;
			dp[v]=1ll*dp[v]*fac[son[v]]%mod;
			dp[u]=1ll*dp[u]*dp[v]%mod;
			dp[u]=1ll*dp[u]*fac[son[u]-1]%mod;
		//	cout<<"?"<<u<<' '<<v<<' '<<dp[u]<<' '<<dp[v]<<'\n';
		}
}
bool flag1,flag2=0;
void solve()
{
	flag1=1,flag2=1;
	cin>>n>>k;
	for(int i=1;i<=n;i++)G[i].clear(),son[i]=0,vis[i]=0;
	for(int i=1;i<=n;i++)cnt[i]=0;
	for(int i=1;i<n;i++)
	{
		int u,v;
		cin>>u>>v;
		flag1&=(u==i&&v==i+1);
		flag2&=(u==1&&v==i+1);
		e1[i]=u,e2[i]=v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	int Ans=0;
	if(flag1)
	{
		for(int i=1;i<=k;i++)
		{
			int x;
			cin>>x;
		}
		cout<<1<<'\n';
		return;
	}
	else if(flag2)
	{
		for(int i=1;i<=k;i++)
		{
			int x;
			cin>>x;
		}
		if(n==2)cout<<1<<'\n';
		else {
			Ans=(1ll*k*fac[n-2]%mod-1ll*k*(k-1)%mod*inv2%mod*fac[n-3]%mod+mod)%mod;
		}
		cout<<Ans<<'\n';
	}
	else 
	{
		predfs(1,0);
		dfs1(1,0);
		dfs2(1,0);
		for(int i=1;i<=k;i++)
		{
			int x;
			cin>>x;
			cnt[e1[x]]++;
			cnt[e2[x]]++;
			Ans=(Ans+ans[e1[x]])%mod;
		}
		for(int i=1;i<=n;i++)
			Ans=(Ans+mod-1ll*(cnt[i]-1)*cnt[i]%mod*inv2%mod*ans[i]*inv[rson[i]-1]%mod)%mod;
		cout<<Ans<<'\n';
		return;
	}
}

int main()
{
	ios::sync_with_stdio(0),cin.tie(0);
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	fac[0]=ifac[0]=inv[1]=1;
	for(int i=2;i<=100000;i++)
		inv[i]=1ll*inv[mod%i]*(mod-mod/i)%mod;
	for(int i=1;i<=100000;i++)
		fac[i]=1ll*fac[i-1]*i%mod;
	for(int i=1;i<=100000;i++)
		ifac[i]=1ll*ifac[i-1]*inv[i]%mod;
	int S1=0,S2=0;
	f[0]=1,S1=1,S2=1;
	for(int i=1;i<=100000;i++)
	{
		f[i]=1ll*S1*fac[i-1]%mod;
		S2=(S2+1ll*f[i]*ifac[i]%mod)%mod;
		S1=(S1+S2)%mod;
	}
	for(int i=1;i<=100000;i++)
		invf[i]=ksm(f[i],mod-2);
	cin>>C>>T;
//	cout<<C<<'\n';
	while(T--)solve();
}
/*
7 1
5 2
1 2
1 3
2 4
2 5
1 3
*/
