#include<bits/stdc++.h>
using namespace std;
int T,s,w1[100005],ans,d,f,o,i,li[100005],ax[100005],bx[200005],cx[200005],fa[100005],ff[100005],k[100005],b[100005],dp[100005],an;
const int mod=1e9+7;bool us[100005];
template<typename T>inline void read(T &n){
T w=1;n=0;char ch=getchar();
while(!isdigit(ch)&&ch!=EOF){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)&&ch!=EOF)n=(n<<1)+(n<<3)+(ch&15),ch=getchar();
n*=w;
}
void dfs(int x){
k[++f]=x;
for(int g=ax[x];g;g=bx[g])if(cx[g]!=fa[x])fa[cx[g]]=x,ff[cx[g]]=g,dfs(cx[g]);
}
int ww(int x,int y){int kk=1;while(y){if(y&1)kk=1ll*kk*x%mod;x=1ll*x*x%mod,y>>=1;}return kk;}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
freopen("traverse.in","r",stdin);
freopen("traverse.out","w",stdout);
read(T),read(T);
while(T--){
read(s),read(d),w1[0]=1,f=0;for(int g=1;g<=s;g++)w1[g]=1ll*w1[g-1]*g%mod,li[g]=ax[g]=dp[g]=0;
for(int g=1;g<s;g++)read(o),read(i),li[o]++,li[i]++,bx[g*2-1]=ax[o],ax[o]=g*2-1,cx[g*2-1]=i,bx[g*2]=ax[i],ax[i]=g*2,cx[g*2]=o,us[g]=0;
ans=1;for(int g=1;g<=s;g++)ans=1ll*ans*w1[li[g]-1]%mod;dfs(1);
for(int g=1;g<=s;g++)b[g]=w1[li[g]-1];for(int g=s;g>1;g--)b[fa[k[g]]]=1ll*b[fa[k[g]]]*b[k[g]]%mod;
for(int g=1;g<=d;g++)read(o),us[o]=1;an=0;
for(int g=s;g;g--){
int kk=0,ki=1;
for(int h=ax[k[g]];h;h=bx[h])if(cx[h]!=fa[k[g]]){
kk=1ll*kk*b[cx[h]]%mod;
kk=(kk+1ll*dp[cx[h]]*dp[k[g]])%mod;
dp[k[g]]=(1ll*dp[k[g]]*b[cx[h]]+1ll*dp[cx[h]]*ki)%mod;
ki=1ll*ki*b[cx[h]]%mod;
}
int kt=(ff[k[g]]+1)>>1;
int kz=1;if(li[k[g]]>1)kz=w1[li[k[g]]-2];dp[k[g]]=1ll*dp[k[g]]*kz%mod,kk=1ll*kk*kz%mod;
if(us[kt])kk=(kk+dp[k[g]])%mod,dp[k[g]]=b[k[g]];
int kl=ww(b[k[g]],mod-2);
an=(an+1ll*ans*kl%mod*kk)%mod;
}
ans=(1ll*ans*d+mod-an)%mod,cout<<ans<<'\n';
}
return 0;
}