#include <bits/stdc++.h>
using namespace std;
enum { N = 400007, P = 1000000007 };
typedef int Ni[N];
int n, q, m, c, F[100007][307], C[307][307];
Ni hd, nt, to, sz, de, tp, fa, son, L, R, T, W, HD, NT, TO, is, I;
void walk(int u) {
  sz[u] = 1, de[u] = de[fa[u]] + 1;
  for (int e = hd[u]; e; e = nt[e]) {
    int v = to[e];
    if (v == fa[u]) continue;
    fa[v] = u, walk(v);
    sz[u] += sz[v];
    if (sz[v] > sz[son[u]]) son[u] = v;
  }
}
void run(int u) {
  L[u] = ++c;
  if (son[u]) tp[son[u]] = tp[u], run(son[u]);
  for (int e = hd[u]; e; e = nt[e]) {
    int v = to[e];
    if (v == fa[u] || v == son[u]) continue;
    tp[v] = v, run(v);
  }
  R[u] = c;
}
int lca(int x, int y) {
  while (tp[x] != tp[y])
    if (de[tp[x]] > de[tp[y]])
      x = fa[tp[x]];
    else
      y = fa[tp[y]];
  return de[x] < de[y] ? x : y;
}
bool cmp(int x, int y) { return L[x] < L[y]; }
void FLY(int u, int f = 0) {
  if (is[u])
    for (int i = 1; i <= m; ++i) F[u][i] = i;
  else
    for (int i = 1; i <= m; ++i) F[u][i] = 1;
  for (int &e = HD[u]; e; e = NT[e]) {
    int v = TO[e];
    if (v == f) continue;
    FLY(v, u);
    for (int i = 1; i <= m; ++i) F[u][i] = 1LL * F[u][i] * F[v][i - is[u]] % P;
  }
  is[u] = 0;
}
int main() {
  scanf("%d%d", &n, &q);
  int e = 0;
  for (int i = 2; i <= n; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    nt[++e] = hd[x], hd[x] = e, to[e] = y;
    nt[++e] = hd[y], hd[y] = e, to[e] = x;
  }
  for (int i = 0; i <= 300; ++i)
    for (int j = *C[i] = 1; j <= i; ++j)
      C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % P;
  I[1] = 1;
  for (int i = 2; i <= 300; ++i) I[i] = P - 1LL * P / i * I[P % i] % P;
  for (int i = *I = 1; i <= 300; ++i) I[i] = 1LL * I[i - 1] * I[i] % P;
  walk(1), run(tp[1] = 1);
  while (q--) {
    int t, r, w;
    scanf("%d%d%d", &t, &m, &r);
    for (int i = 1; i <= t; ++i) scanf("%d", T + i), is[T[i]] = 1;
    T[++t] = r;
    sort(T + 1, T + 1 + t, cmp);
    int _ = t;
    for (int i = 2; i <= _; ++i) T[++t] = lca(T[i], T[i - 1]);
    sort(T + 1, T + 1 + t, cmp);
    t = unique(T + 1, T + 1 + t) - T - 1;
    W[w = 1] = T[1];
    int e = 0;
    for (int i = 2; i <= t; ++i) {
      while (L[T[i]] > R[W[w]]) --w;
      NT[++e] = HD[T[i]], HD[T[i]] = e, TO[e] = W[w];
      NT[++e] = HD[W[w]], HD[W[w]] = e, TO[e] = T[i];
      W[++w] = T[i];
    }
    FLY(r);
    int s = 0;
    for (int i = 1; i <= m; ++i) {
      for (int j = 1; j <= i - 1; ++j)
        F[r][i] = (F[r][i] - 1LL * C[i][j] * F[r][j] % P + P) % P;
      s = (s + 1LL * F[r][i] * I[i]) % P;
    }
    printf("%d\n", s);
  }
  return 0;
}
