#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const long long mod = 1e9 + 7;
int n, q, u, v, k, m, r, t;
vector<int> path[maxn];
int fa[maxn][21], depth[maxn];
long long dp[maxn][310];
int bit[maxn];
int node[maxn], anc[maxn];
int st[maxn], ed[maxn], idx[maxn];
bool in[maxn];
void dfs(int p) {
  st[p] = ++t;
  idx[t] = p;
  for (int i = 0; i < path[p].size(); i++)
    if (path[p][i] != fa[p][0]) {
      fa[path[p][i]][0] = p;
      depth[path[p][i]] = depth[p] + 1;
      dfs(path[p][i]);
    }
  ed[p] = t;
  return;
}
int lca(int a, int b) {
  if (depth[a] < depth[b]) swap(a, b);
  for (int i = 20; i >= 0; i--)
    if (depth[fa[a][i]] >= depth[b]) a = fa[a][i];
  if (a == b) return a;
  for (int i = 20; i >= 0; i--)
    if (fa[a][i] != fa[b][i]) {
      a = fa[a][i];
      b = fa[b][i];
    }
  return fa[a][0];
}
void update(int p, int num) {
  while (p <= n) {
    bit[p] += num;
    p += (p & (-p));
  }
  return;
}
int calc(int p) {
  int ans = 0;
  while (p > 0) {
    ans += bit[p];
    p -= (p & (-p));
  }
  return ans;
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &u, &v);
    path[u].push_back(v);
    path[v].push_back(u);
  }
  t = 0;
  fa[1][0] = 1;
  depth[1] = 1;
  dfs(1);
  for (int i = 1; i < 21; i++)
    for (int j = 1; j <= n; j++) fa[j][i] = fa[fa[j][i - 1]][i - 1];
  while (q--) {
    scanf("%d%d%d", &k, &m, &r);
    for (int i = 1; i <= k; i++) {
      scanf("%d", &node[i]);
      in[node[i]] = true;
      update(st[node[i]], 1);
      if (ed[node[i]] < n) update(ed[node[i]] + 1, -1);
    }
    for (int i = 1; i <= k; i++) {
      anc[i] = calc(st[node[i]]) + calc(st[r]) - calc(st[lca(node[i], r)]) * 2;
      if (in[lca(node[i], r)]) anc[i]++;
    }
    sort(anc + 1, anc + k + 1);
    dp[1][1] = 1ll;
    for (int i = 2; i <= m; i++) dp[1][i] = 0ll;
    for (int i = 2; i <= k; i++)
      for (int j = 1; j <= m; j++) {
        if (j < anc[i] || j > i) {
          dp[i][j] = 0ll;
          continue;
        }
        dp[i][j] = (dp[i - 1][j] * (j - anc[i] + 1) + dp[i - 1][j - 1]) % mod;
      }
    long long ans = 0ll;
    for (int i = 1; i <= m; i++) {
      ans += dp[k][i];
      if (ans >= mod) ans -= mod;
    }
    printf("%I64d\n", ans);
    for (int i = 1; i <= k; i++) {
      in[node[i]] = false;
      update(st[node[i]], -1);
      if (ed[node[i]] < n) update(ed[node[i]] + 1, 1);
    }
  }
  return 0;
}
