#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long p[60005];
long long gt[100005];
vector<int> E[100005];
long long sz[100005];
int tot;
long long ad(long long a, long long b) {
  return (((a % mod + b % mod) % mod) + mod) % mod;
}
long long ap(long long a, long long b) { return ((a % mod) * (b % mod)) % mod; }
int n;
void dfs(int u, int fa) {
  sz[u] = 1;
  for (int i = 0; i <= E[u].size() - 1; i++) {
    int v = E[u][i];
    if (v == fa) continue;
    dfs(v, u);
    sz[u] += sz[v];
  }
  for (int i = 0; i <= E[u].size() - 1; i++) {
    int v = E[u][i];
    if (v == fa) continue;
    gt[++tot] = 1ll * (n - sz[v]) * sz[v];
  }
}
int main(int argc, char** argv) {
  int T;
  T = 1;
  scanf("%d", &T);
  while (T--) {
    tot = 0;
    int m;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) E[i].clear();
    for (int i = 1; i <= n - 1; i++) {
      int u, v;
      scanf("%d", &u);
      scanf("%d", &v);
      E[u].push_back(v);
      E[v].push_back(u);
    }
    scanf("%d", &m);
    for (int i = 1; i <= m; i++) scanf("%lld", &p[i]);
    sort(p + 1, p + 1 + m);
    dfs(1, -1);
    sort(gt + 1, gt + 1 + tot);
    int j = 0;
    long long ans = 0;
    while (m > tot) {
      p[m - 1] = ap(p[m], p[m - 1]);
      m--;
    }
    for (int i = 1; i <= tot; i++) {
      if (tot - i + 1 <= m) {
        ans = ad(ans, ap(p[++j], gt[i]));
      } else
        ans = ad(ans, gt[i]);
    }
    cout << ans << endl;
  }
  return 0;
}
