#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=100100;
int h[N],nxt[N],cnt,ans=1,Mod=1e9+7,num[N],k[N];
struct node {
	int l,r;
}edge[N];
void add(int x,int y) {
	edge[++cnt].l=x;edge[cnt].r=y;
	nxt[cnt]=h[x];h[x]=cnt;
}
void dfs(int x,int fa) {
	for(int i=h[x];i;i=nxt[i]) {
		if(edge[i].r==fa) continue;
		else {
			num[edge[i].l]++;
			dfs(edge[i].r,x);
		}
	}
}
signed main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	int c,T,n,m,x,y;cin>>c>>T>>n>>m;
	for(int i=1;i<=n-1;i++) {
		cin>>x>>y;add(x,y);add(y,x);
	}
	for(int i=1;i<=m;i++) cin>>k[i];
	for(int i=1;i<=m;i++) {
		dfs(k[i],-1);
		for(int i=1;i<=n;i++) {
			ans=ans*num[i];ans%=Mod;num[i]=0;
		}
	}
	cout<<ans<<endl;
	return 0;
}
