#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
const int N = 1e5 + 10;
const int M = 333;
struct edge {
  int to, nxt;
} e[N << 1];
int n, q, m, r, tot, timer;
int c[N], head[N], dp[N][M], size[N], heavy[N], f[N], top[N], dfn[N], depth[N],
    perm[N], fa[N], a[N];
template <typename T>
inline void chkmax(T &x, T y) {
  x = max(x, y);
}
template <typename T>
inline void chkmin(T &x, T y) {
  x = min(x, y);
}
template <typename T>
inline void read(T &x) {
  T f = 1;
  x = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -f;
  for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';
  x *= f;
}
inline void modify(int x, int val) {
  for (int i = x; i <= n; i += i & (-i)) c[i] += val;
}
inline int ask(int x) {
  int res = 0;
  for (int i = x; i >= 1; i -= i & (-i)) res += c[i];
  return res;
}
inline int ask(int l, int r) { return ask(r) - ask(l - 1); }
inline void addedge(int u, int v) {
  ++tot;
  e[tot] = (edge){v, head[u]};
  head[u] = tot;
}
inline void dfs1(int u, int par) {
  size[u] = 1;
  heavy[u] = 0;
  depth[u] = depth[par] + 1;
  fa[u] = par;
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v == par) continue;
    dfs1(v, u);
    size[u] += size[v];
    if (size[v] > size[heavy[u]]) heavy[u] = v;
  }
}
inline void dfs2(int u, int par, int chain_top) {
  dfn[u] = ++timer;
  top[u] = chain_top;
  if (heavy[u]) dfs2(heavy[u], u, chain_top);
  for (int i = head[u]; i; i = e[i].nxt) {
    int v = e[i].to;
    if (v == par || v == heavy[u]) continue;
    dfs2(v, u, v);
  }
}
inline bool cmp(int x, int y) { return f[x] < f[y]; }
inline int query(int u, int v) {
  int ans = 0;
  while (top[u] != top[v]) {
    if (depth[top[u]] < depth[top[v]]) swap(u, v);
    ans += ask(dfn[top[u]], dfn[u]);
    u = fa[top[u]];
  }
  if (dfn[u] < dfn[v])
    ans += ask(dfn[u], dfn[v]);
  else
    ans += ask(dfn[v], dfn[u]);
  return ans;
}
int main() {
  read(n);
  read(q);
  for (int i = 1; i < n; ++i) {
    int u, v;
    read(u);
    read(v);
    addedge(u, v);
    addedge(v, u);
  }
  dfs1(1, 0);
  dfs2(1, 0, 1);
  while (q--) {
    int K, m, r;
    read(K);
    read(m);
    read(r);
    for (int i = 1; i <= K; ++i) read(a[i]);
    for (int i = 1; i <= K; ++i) modify(dfn[a[i]], 1);
    for (int i = 1; i <= K; ++i) f[i] = query(a[i], r) - 1;
    for (int i = 1; i <= K; ++i) perm[i] = i;
    sort(perm + 1, perm + K + 1, cmp);
    dp[1][1] = 1;
    for (int i = 2; i <= K; ++i) {
      for (int j = 1; j <= min(i, m); ++j) {
        if (j - f[perm[i]] >= 0)
          dp[i][j] = (dp[i][j] + 1ll * (j - f[perm[i]]) * dp[i - 1][j] % P +
                      dp[i - 1][j - 1]) %
                     P;
      }
    }
    int ans = 0;
    for (int i = 1; i <= m; ++i) ans = (ans + dp[K][i]) % P;
    printf("%d\n", ans);
    for (int i = 1; i <= K; ++i) modify(dfn[a[i]], -1);
    for (int i = 1; i <= K; ++i) {
      for (int j = 1; j <= min(i, m); ++j) {
        dp[i][j] = 0;
      }
    }
  }
  return 0;
}
