#include<bits/stdc++.h>
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;
typedef long double LD;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll MOD=1e9+7;
const ll INF=0x3f3f3f3f3f3f3f3f;
const LD eps=1e-9;
void file()
{
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
return ;
}
inline ll read()
{
ll x=0, f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') x=x*10+c-'0', c=getchar();
return x*f;
}
inline ll qpow(ll x,ll y)
{
ll res=1;
while(y)
{
if(y&1) res=(res*x)%MOD;
y>>=1;
x=(x*x)%MOD;
}
return res;
}
ll id, TTT;
const int N=1e5+500;
int last[N], nect[N<<1], to[N<<1];
int xnt=1;
int in[N];
ll siz[N], val[N];
int fa[N];
ll fac[N+500], inv[N+500];
ll res;
bool tag[N];
int n, m;
ll P;
inline void add(int x,int y)
{
to[++xnt]=y;
nect[xnt]=last[x];
last[x]=xnt;
return ;
}
void iinit()
{
fac[0]=inv[0]=1;
for(int i=1;i<=N;i++) fac[i]=(fac[i-1]*i)%MOD;
for(int i=1;i<=N;i++) inv[i]=qpow(i,MOD-2);
return ;
}
void init()
{
memset(last,0,sizeof(last));
memset(tag,0,sizeof(tag));
memset(in,0,sizeof(in));
memset(siz,0,sizeof(siz));
memset(val,0,sizeof(val));
memset(fa,0,sizeof(fa));
xnt=1;
res=1;
n=read(), m=read();
int a, b;
for(int i=1;i<n;i++)
{
a=read(), b=read();
add(a,b), add(b,a);
in[a]++, in[b]++;
}
for(int i=1;i<=m;i++) tag[read()]=1;
res=1;
for(int i=1;i<=n;i++)
{
res=(res*fac[in[i]-1])%MOD;
}
P=res;
res=(res*m)%MOD;
return ;
}
void dfs(int x)
{
siz[x]=0, val[x]=0;
int k;
ll tot=0, d=0;
bool flag=0;
for(int i=last[x];i;i=nect[i])
{
k=to[i];
if(k==fa[x])
{
if(tag[i/2]) flag=1;
continue;
}
fa[k]=x;
dfs(k);
if(siz[k])
{
siz[x]+=siz[k];
d=(d+(tot*val[k])%MOD*P)%MOD;
tot=(tot+val[k]*inv[in[x]-1])%MOD;
}
}
res=(res-d+MOD)%MOD;
if(flag)
{
res=(res-tot*P)%MOD;
siz[x]=1;
val[x]=1;
}
else val[x]=tot;
return ;
}
int main()
{
file();
iinit();
id=read(), TTT=read();
while(TTT--)
{
init();
fa[1]=0, dfs(1);
res=(res%MOD+MOD)%MOD;
printf("%lld\n",res);
}
return 0;
}