#include <bits/stdc++.h>
using namespace std;
const int maxN = 100010;
const int maxK = 18;
const int maxM = 26;
const int MOD = 1e9 + 7;
int n, q;
vector<int> path[maxN];
int st[maxN], ed[maxN], dis[maxN];
int pre[maxN][maxK];
int tot = 0;
int h1[maxN], hnew[maxN];
void dfs(int x) {
  st[x] = ++tot;
  for (auto y : path[x]) {
    if (y == pre[x][0]) continue;
    pre[y][0] = x;
    dis[y] = dis[x] + 1;
    dfs(y);
  }
  ed[x] = tot;
}
void bz() {
  for (int i = 1; i < maxK; i++) {
    for (int x = 1; x <= n; x++) {
      pre[x][i] = pre[pre[x][i - 1]][i - 1];
    }
  }
}
void build() {
  dfs(1);
  bz();
}
int getLCA(int x, int y) {
  if (dis[x] < dis[y]) swap(x, y);
  for (int i = maxK - 1; i >= 0; i--) {
    if (dis[x] - dis[y] >= (1 << i)) x = pre[x][i];
  }
  if (x == y) return x;
  for (int i = maxK - 1; i >= 0; i--) {
    if (pre[x][i] != pre[y][i]) {
      x = pre[x][i];
      y = pre[y][i];
    }
  }
  return pre[x][0];
}
int w[maxN];
int lowbit(int x) { return x & (-x); }
void sg_add(int x, int p) {
  for (; x <= n; x += lowbit(x)) {
    w[x] += p;
  }
}
void add(int x, int y, int p) {
  sg_add(x, p);
  sg_add(y + 1, -p);
}
int getsum(int x) {
  int res = 0;
  for (; x; x -= lowbit(x)) {
    res += w[x];
  }
  return res;
}
long long f[maxN][310];
bool cmp(int x, int y) { return hnew[x] < hnew[y]; }
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    path[x].push_back(y);
    path[y].push_back(x);
  }
  build();
  for (int i = 1; i <= q; i++) {
    int k, m, r;
    scanf("%d%d%d", &k, &m, &r);
    vector<int> a;
    set<int> H;
    for (int j = 1; j <= k; j++) {
      int x;
      scanf("%d", &x);
      a.push_back(x);
      H.insert(x);
      add(st[x], ed[x], 1);
    }
    h1[r] = getsum(st[r]);
    for (auto x : a) {
      int u = getLCA(x, r);
      h1[x] = getsum(st[x]);
      h1[u] = getsum(st[u]);
      hnew[x] = h1[x] + h1[r] - 2 * h1[u] + H.count(u) - 1;
    }
    sort(a.begin(), a.end(), cmp);
    f[0][0] = 1;
    for (int j = 1; j <= k; j++) {
      for (int z = 1; z <= m; z++) {
        f[j][z] = f[j - 1][z] * (z - hnew[a[j - 1]]) % MOD + f[j - 1][z - 1];
        f[j][z] %= MOD;
      }
    }
    long long ans = 0;
    for (int j = 1; j <= m; j++) {
      ans += f[k][j];
      ans %= MOD;
    }
    cout << ans << endl;
    for (auto x : a) {
      add(st[x], ed[x], -1);
    }
  }
  return 0;
}
