#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
const int N = 100005;
const int M = 1e9 + 7;
vector<int> adj[N];
int tree[N * 2], dep[N], anc[N][23], st[N], ed[N], idx = 0, a[N], b[N], h[N];
long long dp[305];
int low_bit(int x) { return x & -x; }
void update(int x, int y) {
  for (; x < N * 2; x += low_bit(x)) tree[x] += y;
}
int query(int x) {
  int r = 0;
  for (; x; x -= low_bit(x)) r += tree[x];
  return r;
}
void dfs(int d, int u, int p) {
  dep[u] = d;
  anc[u][0] = p;
  st[u] = ++idx;
  for (int i = 1; i < 23; i++) anc[u][i] = anc[anc[u][i - 1]][i - 1];
  for (auto v : adj[u]) {
    if (v == p) continue;
    dfs(d + 1, v, u);
  }
  ed[u] = ++idx;
}
int lca(int u, int v) {
  if (dep[u] > dep[v]) swap(u, v);
  for (int i = 22; i >= 0; i--)
    if (dep[u] <= dep[anc[v][i]]) v = anc[v][i];
  if (u == v) return u;
  for (int i = 22; i >= 0; i--)
    if (anc[u][i] != anc[v][i]) {
      u = anc[u][i];
      v = anc[v][i];
    }
  return anc[u][0];
}
int main() {
  time_point<steady_clock> start = steady_clock::now();
  int n, q, u, v, k, m, r;
  scanf("%d%d", &n, &q);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &u, &v);
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  dfs(1, 1, 1);
  while (q--) {
    scanf("%d%d%d", &k, &m, &r);
    for (int i = 1; i <= k; i++) {
      scanf("%d", &a[i]);
      b[a[i]] = 1;
      update(st[a[i]], 1);
      update(ed[a[i]], -1);
    }
    v = query(st[r]);
    bool flag = false;
    for (int i = 1; i <= k; i++) {
      u = lca(a[i], r);
      h[i] = v + query(st[a[i]]) - 2 * query(st[u]) + b[u] - 1;
      if (h[i] >= m) flag = true;
    }
    for (int i = 1; i <= k; i++) {
      b[a[i]] = 0;
      update(st[a[i]], -1);
      update(ed[a[i]], 1);
    }
    if (flag) {
      printf("0\n");
      continue;
    }
    sort(h + 1, h + k + 1);
    memset((dp), (0), sizeof(dp));
    dp[1] = 1;
    for (int i = 2; i <= k; i++)
      for (int j = m; j >= 1; j--)
        if (h[i] >= j)
          dp[j] = 0;
        else
          dp[j] = (dp[j] * (j - h[i]) % M + dp[j - 1]) % M;
    long long ans = 0;
    for (int j = 1; j <= m; j++) (ans += dp[j]) %= M;
    printf("%lld\n", ans);
  }
  cerr << endl
       << "------------------------------" << endl
       << "Time: "
       << duration<double, milli>(steady_clock::now() - start).count() << " ms."
       << endl;
  return 0;
}
