#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int N=1e5+10,mod=1e9+7;
void add(int &x,int y){
	x+=y;
	if(x>=mod)x-=mod;
}
struct edge{int u,v;}e1[N];
int n,m,u,v,f0[N],f1[N],jc[N];
bool vis[N];
vector<pair<int,int>> e[N];
void dfs(int u,int fa){
	f0[u]=0,f1[u]=1;
	for(auto i:e[u]){
		int v=i.first,id=i.second;
		if(v==fa)continue;
		dfs(v,u);
		int h1=0,h0=0;
		add(h1,1ll*f1[u]*f1[v]%mod);
		add(h0,1ll*f1[u]*f0[v]%mod);
		add(h0,1ll*f0[u]*f1[v]%mod);
		if(vis[id])add(h0,1ll*f1[u]*f1[v]%mod);
		f0[u]=h0,f1[u]=h1;
	}
}
void solve(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)e[i].clear(),vis[i]=0,f0[i]=f1[i]=0;
	for(int i=1;i<n;i++){
		cin>>u>>v;
		e1[i]={u,v};
		e[u].push_back({v,i});
		e[v].push_back({u,i});
	}
	for(int i=1;i<=m;i++)cin>>u,vis[u]=true;
	dfs(1,0);
	int res=1;
	for(int i=1;i<=n;i++){
		int x=e[i].size()-1;
		res=1ll*res*jc[x]%mod;
	}
	cout<<1ll*f0[1]*res%mod<<endl;
}
signed main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	jc[0]=1;
	for(int i=1;i<N;i++)jc[i]=1ll*jc[i-1]*i%mod;
	int T,C;cin>>C>>T;
	while(T--)solve(); 
}

