#include <bits/stdc++.h>
const int N = 2e5 + 10, P = 1e9 + 7;
int ri() {
  char c = getchar();
  int x = 0, f = 1;
  for (; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) - '0' + c;
  return x * f;
}
int a[N], to[N], nx[N], pr[N], de[N];
int sz[N], ds[N], fa[N], in[N], out[N], d[N], t[N], h[N], f[301], n, tp, tot;
bool mk[N];
void add(int u, int v) {
  to[++tp] = v;
  nx[tp] = pr[u];
  pr[u] = tp;
}
void adds(int u, int v) {
  add(u, v);
  add(v, u);
}
void Dfs1(int u, int fa) {
  ::fa[u] = fa;
  de[u] = de[fa] + 1;
  sz[u] = 1;
  for (int i = pr[u]; i; i = nx[i])
    if (to[i] != fa) {
      Dfs1(to[i], u);
      sz[u] += sz[to[i]];
      if (sz[ds[u]] < sz[to[i]]) ds[u] = to[i];
    }
}
void Dfs2(int u, int c) {
  d[u] = c;
  in[u] = ++tot;
  if (!ds[u]) return out[u] = tot, void();
  Dfs2(ds[u], c);
  for (int i = pr[u]; i; i = nx[i])
    if (to[i] != fa[u] && to[i] != ds[u]) Dfs2(to[i], to[i]);
  out[u] = tot;
}
int Lca(int u, int v) {
  for (; d[u] != d[v]; u = fa[d[u]])
    if (de[d[u]] < de[d[v]]) std::swap(u, v);
  return de[u] < de[v] ? u : v;
}
void Add(int x, int y) {
  for (; x <= n; x += x & -x) t[x] += y;
}
int Que(int x, int r = 0) {
  for (; x; x -= x & -x) r += t[x];
  return r;
}
int main() {
  n = ri();
  int q = ri();
  for (int i = 1; i < n; ++i) adds(ri(), ri());
  Dfs1(1, 0);
  Dfs2(1, 1);
  for (; q--;) {
    int k = ri(), m = ri(), r = ri();
    for (int i = 1; i <= k; ++i)
      a[i] = ri(), Add(in[a[i]], 1), Add(out[a[i]] + 1, -1), mk[a[i]] = true;
    int dr = Que(in[r]);
    for (int i = 1, c; i <= k; ++i)
      c = Lca(a[i], r),
      h[i] = Que(in[a[i]]) + dr - (Que(in[c]) << 1) + mk[c] - 1;
    std::sort(h + 1, h + k + 1);
    for (int i = 1; i <= k; ++i)
      Add(in[a[i]], -1), Add(out[a[i]] + 1, 1), mk[a[i]] = false;
    bool flag = true;
    for (int i = 1; i <= k; ++i)
      if (h[i] >= m) {
        flag = false;
        break;
      }
    if (!flag) {
      puts("0");
      continue;
    }
    f[0] = 1;
    for (int i = 1; i <= k; ++i)
      for (int j = std::min(m, i); ~j; --j)
        f[j] = j <= h[i] ? 0 : (1LL * f[j] * (j - h[i]) + f[j - 1]) % P;
    long long ans = 0;
    for (int i = 1; i <= m; ++i) ans += f[i];
    printf("%lld\n", ans % P);
    for (int i = 1; i <= m; ++i) f[i] = 0;
  }
  return 0;
}
