#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long n, q, k, m, r;
long long read() {
  long long f = 0, w = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    f = f * 10 + ch - '0';
    ch = getchar();
  }
  return f * w;
}
namespace bit {
long long s[100005];
void add(long long x, long long k) {
  while (x <= n) {
    s[x] += k;
    x += (x & -x);
  }
}
long long query(long long x) {
  long long ans = 0;
  while (x) {
    ans += s[x];
    x -= (x & -x);
  }
  return ans;
}
long long query(long long l, long long r) { return query(r) - query(l - 1); }
}  // namespace bit
struct node {
  long long to, next;
} e[200005];
long long cnt, hd[100005], son[100005], top[100005], siz[100005], dfn[100005],
    dfn_cnt, dep[100005], fa[100005], f[100005], p[100005], dp[100005][305];
void addedge(long long x, long long y) {
  e[++cnt].next = hd[x];
  e[cnt].to = y;
  hd[x] = cnt;
}
bool cmp(long long x, long long y) { return f[x] < f[y]; }
void dfs_son(long long x, long long ff) {
  dep[x] = dep[ff] + 1;
  fa[x] = ff;
  siz[x] = 1;
  long long maxson = -1;
  for (long long i = hd[x]; i; i = e[i].next) {
    long long to = e[i].to;
    if (to == ff) continue;
    dfs_son(to, x);
    siz[x] += siz[to];
    if (siz[to] > maxson) son[x] = to, maxson = siz[to];
  }
}
void dfs_chain(long long x, long long tp) {
  top[x] = tp;
  dfn[x] = ++dfn_cnt;
  if (son[x]) dfs_chain(son[x], tp);
  for (long long i = hd[x]; i; i = e[i].next) {
    long long to = e[i].to;
    if (dfn[to]) continue;
    dfs_chain(to, to);
  }
}
long long query(long long x, long long y) {
  long long ans = 0;
  while (top[x] != top[y]) {
    if (dep[top[x]] < dep[top[y]]) swap(x, y);
    ans += bit::query(dfn[top[x]], dfn[x]);
    x = fa[top[x]];
  }
  if (dfn[x] > dfn[y]) swap(x, y);
  ans += bit::query(dfn[x], dfn[y]);
  return ans;
}
signed main() {
  n = read(), q = read();
  for (long long i = 1; i < n; i++) {
    long long x = read(), y = read();
    addedge(x, y), addedge(y, x);
  }
  dfs_son(1, 0);
  dfs_chain(1, 1);
  while (q--) {
    k = read(), m = read(), r = read();
    for (long long j = 1; j <= k; j++) p[j] = read(), bit::add(dfn[p[j]], 1);
    for (long long j = 1; j <= k; j++) f[p[j]] = query(r, p[j]) - 1;
    sort(p + 1, p + 1 + k, cmp);
    dp[1][1] = 1;
    for (long long j = 2; j <= k; j++) {
      for (long long l = 1; l <= min(j, m); l++) {
        dp[j][l] =
            (dp[j - 1][l - 1] + max(0ll, l - f[p[j]]) * dp[j - 1][l] % mod) %
            mod;
      }
    }
    long long ans = 0;
    for (long long j = 1; j <= m; j++) ans = (ans + dp[k][j]) % mod;
    printf("%lld\n", ans);
    for (long long j = 1; j <= k; j++) bit::add(dfn[p[j]], -1), f[p[j]] = 0;
    for (long long j = 1; j <= k; j++) {
      for (long long l = 1; l <= m; l++) {
        dp[j][l] = 0;
      }
    }
  }
  return 0;
}
