#include <bits/stdc++.h>
using namespace std;
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 5;
int add(int x, int y) {
  x += y;
  return x >= mod ? x - mod : x;
}
int sub(int x, int y) {
  x -= y;
  return x < 0 ? x + mod : x;
}
int mul(int x, int y) { return 1ll * x * y % mod; }
int ksm(int a, int b) {
  int ans;
  for (; b; b >>= 1, a = mul(a, a))
    if (b & 1) ans = mul(ans, a);
  return ans;
}
int en[maxn], nt[maxn], la[maxn], owo;
void adg(int x, int y) {
  en[++owo] = y;
  nt[owo] = la[x];
  la[x] = owo;
}
int bit[maxn];
int n, q;
void abit(int x, int d) {
  for (; x <= n; x += ((x) & (-x))) bit[x] += d;
}
int gsum(int x) {
  int sm = 0;
  for (; x; x -= ((x) & (-x))) sm += bit[x];
  return sm;
}
int IN[maxn], OUT[maxn], dfx, sz[maxn], zerz[maxn];
void dfs(int x, int ba) {
  sz[x] = 1;
  for (int it = la[x]; it; it = nt[it]) {
    int y = en[it];
    if (y == ba) continue;
    dfs(y, x);
    sz[x] += sz[y];
    if (sz[y] > sz[zerz[x]]) zerz[x] = y;
  }
}
int top[maxn], dep[maxn], fa[maxn];
void dds(int x, int ba, int ace) {
  IN[x] = ++dfx;
  fa[x] = ba;
  dep[x] = dep[ba] + 1;
  top[x] = ace;
  if (zerz[x]) dds(zerz[x], x, ace);
  for (int it = la[x]; it; it = nt[it]) {
    int y = en[it];
    if (y == ba || y == zerz[x]) continue;
    dds(y, x, y);
  }
  OUT[x] = dfx;
}
int K, M, R;
bool mark[maxn];
int p[maxn], dp[maxn], ff[maxn], ps[maxn];
bool cmp(int x, int y) { return ff[x] < ff[y]; }
int glca(int x, int y) {
  while (top[x] != top[y]) {
    dep[top[x]] < dep[top[y]] ? y = fa[top[y]] : x = fa[top[x]];
  }
  return dep[x] < dep[y] ? x : y;
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    adg(x, y);
    adg(y, x);
  }
  dfs(1, 0);
  dds(1, 1, 1);
  while (q--) {
    scanf("%d%d%d", &K, &M, &R);
    for (int i = 1; i <= K; i++) {
      scanf("%d", &p[i]);
      abit(IN[p[i]], 1);
      abit(OUT[p[i]] + 1, -1);
      mark[p[i]] = 1;
    }
    int ansr = gsum(IN[R]);
    dp[0] = 1;
    for (int j = 1; j <= M; j++) dp[j] = 0;
    for (int i = 1; i <= K; i++) {
      int lcc = glca(p[i], R);
      ff[i] = gsum(IN[p[i]]) + ansr - 1 - 2 * gsum(IN[lcc]) + mark[lcc];
    }
    for (int i = 1; i <= K; i++) {
      abit(IN[p[i]], -1);
      abit(OUT[p[i]] + 1, 1);
      mark[p[i]] = 0;
    }
    for (int i = 1; i <= K; i++) ps[i] = i;
    sort(ps + 1, ps + 1 + K, cmp);
    cerr << ff[ps[K]] << endl;
    if (ff[ps[K]] >= M) {
      puts("0");
      continue;
    }
    for (int i = 1; i <= K; i++) {
      int o = ps[i];
      for (int j = min(i, M); j >= 0; j--) {
        if (ff[o] >= j)
          dp[j] = 0;
        else
          dp[j] = add(mul(dp[j], sub(j, ff[o])), dp[j - 1]);
      }
    }
    int ans = 0;
    for (int i = 1; i <= M; i++) ans = add(ans, dp[i]);
    printf("%d\n", ans);
  }
}
