#include <bits/stdc++.h>
using namespace std;
#define tc int t;cin>>t;while(t--)
#define pb push_back
#define mp make_pair
#define pf push_front
#define ll long long
#define bp pop_back
#define vt vector
#define F first
#define S second
#define SORT(v) sort(v.begin(),v.end())
ll M=1e9+7;
ll n;
ll dfs(vt<ll> v[],ll i,ll j,vt<ll> &w){
if(v[i].size()==1 && i !=1) return 0;
ll ans=0;
for(ll k=0;k<v[i].size();k++){
if(v[i][k] !=j){
ans = dfs(v,v[i][k],i,w);
}
ans +=1;
cout<<ans*(n-ans)<<" ";
w.pb(ans*(n-ans));
}
return ans;
}
int main() {
tc{
ll m,ans=0; cin>>n;
vt<ll> v[n+1];
ll x,y;
for(ll i=1;i<n;i++){
cin>>x>>y;
v[x].pb(y);
v[y].pb(x);
}
cin>>m;
ll a[m];
for(int i=0;i<m;i++) cin>>a[i];
sort(a,a+m);
vt<ll> w;
x=dfs(v,1,n+1,w);
SORT(w);
if(m<=n-1){
x=n-2;
y=m-1;
while(y>=0){
ans +=((a[y]*w[x]))%M;
ans %=M;
y--;
x--;
}
while(x>=0){
ans +=w[x];
ans %=M;
x--;
}
cout<<ans<<endl;
}
else{
ans =1;
x=m-1;
y=n-2;
while(x>=n-2){
ans *=a[x];
ans %=M;
x--;
}
ans *=w[y];
ans %=M;
y--;
while(y>=0){
ans +=(a[y]*w[y])%M;
ans %=M;
y--;
}
cout<<ans<<endl;
}
}
// your code goes here
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdGMgaW50IHQ7Y2luPj50O3doaWxlKHQtLSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwZiBwdXNoX2Zyb250CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYnAgcG9wX2JhY2sKI2RlZmluZSB2dCB2ZWN0b3IKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKI2RlZmluZSBTT1JUKHYpIHNvcnQodi5iZWdpbigpLHYuZW5kKCkpCmxsIE09MWU5Kzc7CmxsIG47CmxsIGRmcyh2dDxsbD4gdltdLGxsIGksbGwgaix2dDxsbD4gJncpewoJaWYodltpXS5zaXplKCk9PTEgJiYgaSAhPTEpIHJldHVybiAwOwoJbGwgYW5zPTA7Cglmb3IobGwgaz0wO2s8dltpXS5zaXplKCk7aysrKXsKCQlpZih2W2ldW2tdICE9ail7CgkJCWFucyA9IGRmcyh2LHZbaV1ba10saSx3KTsKCQl9CgkJYW5zICs9MTsKCQljb3V0PDxhbnMqKG4tYW5zKTw8IiAiOwoJCXcucGIoYW5zKihuLWFucykpOwoJfQoJcmV0dXJuIGFuczsKfQppbnQgbWFpbigpIHsKCXRjewoJCWxsIG0sYW5zPTA7IGNpbj4+bjsKCQl2dDxsbD4gdltuKzFdOwoJCWxsIHgseTsKCQlmb3IobGwgaT0xO2k8bjtpKyspewoJCQljaW4+Png+Pnk7CgkJCXZbeF0ucGIoeSk7CgkJCXZbeV0ucGIoeCk7CgkJfQoJCWNpbj4+bTsKCQlsbCBhW21dOwoJCWZvcihpbnQgaT0wO2k8bTtpKyspICBjaW4+PmFbaV07CgkJc29ydChhLGErbSk7CgkJdnQ8bGw+IHc7CiAgICAgICAgeD1kZnModiwxLG4rMSx3KTsKCQlTT1JUKHcpOwoJCWlmKG08PW4tMSl7CgkJCXg9bi0yOwoJCQkgeT1tLTE7CgkJCXdoaWxlKHk+PTApewoJCQkJYW5zICs9KChhW3ldKndbeF0pKSVNOwoJCQkJYW5zICU9TTsKCQkJCQoJCQkJeS0tOwoJCQkJeC0tOwoJCQl9CgkJCXdoaWxlKHg+PTApewoJCQkJYW5zICs9d1t4XTsKCQkJCWFucyAlPU07CgkJCQl4LS07CgkJCX0KCQkJY291dDw8YW5zPDxlbmRsOwoJCX0KCQllbHNlewoJCQlhbnMgPTE7CgkJCSB4PW0tMTsKCQkJIHk9bi0yOwoJCQl3aGlsZSh4Pj1uLTIpewoJCQkJYW5zICo9YVt4XTsKCQkJCWFucyAlPU07CgkJCQl4LS07CgkJCX0KCQkJYW5zICo9d1t5XTsKCQkJYW5zICU9TTsKCQkJeS0tOwoJCQl3aGlsZSh5Pj0wKXsKCQkJCWFucyArPShhW3ldKndbeV0pJU07CgkJCQlhbnMgJT1NOwoJCQkJeS0tOwoJCQl9CgkJCWNvdXQ8PGFuczw8ZW5kbDsKCQl9Cgl9CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==