#include <bits/stdc++.h>
using namespace std;
const int P = 1000000007, N = 100010;
struct IO_tp {
  static const int Sbuf = 1 << 21;
  char buf[Sbuf], *S, *T, c;
  int f;
  template <class I>
  inline IO_tp &operator>>(I &x) {
    for (f = 1,
        c = (S == T ? (T = (S = buf) + fread(buf, 1, sizeof(buf), stdin),
                      (S == T ? EOF : *S++))
                    : *S++);
         c < '0' || c > '9';
         c = (S == T ? (T = (S = buf) + fread(buf, 1, sizeof(buf), stdin),
                       (S == T ? EOF : *S++))
                     : *S++))
      if (c == '-') f = -1;
    for (x = 0; c >= '0' && c <= '9';
         c = (S == T ? (T = (S = buf) + fread(buf, 1, sizeof(buf), stdin),
                       (S == T ? EOF : *S++))
                     : *S++))
      x = x * 10 + (c ^ 48);
    x *= f;
    return *this;
  }
} io;
int n, q, L[N], R[N], ord, dep[N], ce[N], f[19][N];
int b[N], w[N], F[N][304], mark[N];
vector<int> G[N];
void dfs(int u) {
  L[u] = ++ord;
  for (int &v : G[u])
    if (v != f[0][u]) {
      dep[v] = dep[u] + 1;
      f[0][v] = u;
      dfs(v);
    }
  R[u] = ord;
}
void init() {
  for (int i = 1; i <= n; i++) ce[i] = ce[i >> 1] + 1;
  for (int i = 1; i <= ce[n]; i++)
    for (int j = 1; j <= n; j++) f[i][j] = f[i - 1][f[i - 1][j]];
}
int jump(int x, int d) {
  for (int i = ce[d]; i >= 0; i--)
    if (d >> i & 1) x = f[i][x];
  return x;
}
int lca(int u, int v) {
  if (dep[u] < dep[v]) swap(u, v);
  u = jump(u, dep[u] - dep[v]);
  if (u == v) return u;
  for (int i = ce[dep[u]]; i >= 0; i--)
    if (f[i][u] ^ f[i][v]) u = f[i][u], v = f[i][v];
  return f[0][u];
}
struct BIT {
  int T[N];
  void add(int x, int y) {
    for (; x <= n; x += x & -x) T[x] += y;
  }
  int query(int x) {
    int res = 0;
    for (; x; x &= x - 1) res += T[x];
    return res;
  }
  void update(int l, int r, int x) {
    add(l, x);
    add(r + 1, -x);
  }
} B;
int main() {
  io >> n >> q;
  for (int i = 1, x, y; i < n; i++) {
    io >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  dfs(1);
  init();
  while (q--) {
    int K, m, root;
    io >> K >> m >> root;
    for (int i = 1; i <= K; i++) io >> b[i];
    for (int i = 1; i <= K; i++) B.update(L[b[i]], R[b[i]], 1), mark[b[i]] = 1;
    for (int i = 1; i <= K; i++) {
      int p = lca(b[i], root);
      w[i] = B.query(L[b[i]]) + B.query(L[root]) - B.query(L[p]) * 2;
      if (!mark[p]) w[i]--;
    }
    sort(w + 1, w + 1 + K);
    for (int i = 0; i <= K; i++)
      for (int j = 0; j <= m; j++) F[i][j] = 0;
    F[0][0] = 1;
    for (int i = 1; i <= K; i++)
      for (int j = 1, l = min(i, m); j <= l; j++) {
        F[i][j] = F[i - 1][j - 1];
        if (j > w[i])
          F[i][j] = (F[i][j] + (long long)F[i - 1][j] * (j - w[i])) % P;
      }
    int ans = 0;
    for (int i = 1; i <= m; i++) ans = (ans + F[K][i]) % P;
    printf("%d\n", ans);
    for (int i = 1; i <= K; i++) B.update(L[b[i]], R[b[i]], -1), mark[b[i]] = 0;
  }
  return 0;
}
