#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int MAX_N = 1e5 + 10;
const int mod = 1e9 + 7;
int read();
void dfs_1(int x);
void dfs_2(int x, int tp);
int N, Q;
int f[MAX_N][310];
int fa[MAX_N], sz[MAX_N], top[MAX_N], dep[MAX_N], son[MAX_N], dfn[MAX_N], cnt;
int head[MAX_N], to[MAX_N << 1], nxt[MAX_N << 1], cap;
inline void swap(int& x, int& y) { x ^= y ^= x ^= y; }
inline void inc(int& x, int y) { (x += y) >= mod ? x -= mod : 0; }
inline int mul(int x, int y) { return 1LL * x * y % mod; }
inline int min(int x, int y) { return x < y ? x : y; }
inline int max(int x, int y) { return x > y ? x : y; }
struct BIT {
  int c[MAX_N];
  void ins(int x, int v) {
    for (; x && x <= N; x += x & -x) c[x] += v;
  }
  int query(int x, int res = 0) {
    for (; x; x -= x & -x) res += c[x];
    return res;
  }
} tr;
struct node {
  int x, g;
  bool operator<(const node& rhs) const { return g < rhs.g; }
} a[MAX_N];
inline void link(int x, int y) {
  to[++cap] = y, nxt[cap] = head[x], head[x] = cap;
  to[++cap] = x, nxt[cap] = head[y], head[y] = cap;
}
int query(int u, int v) {
  int res = 0;
  while (top[u] ^ top[v]) {
    if (dep[top[u]] < dep[top[v]]) swap(u, v);
    res += tr.query(dfn[u]) - tr.query(dfn[top[u]] - 1);
    u = fa[top[u]];
  }
  if (dep[u] < dep[v]) swap(u, v);
  res += tr.query(dfn[u]) - tr.query(dfn[v] - 1);
  return res - 1;
}
int main() {
  N = read(), Q = read();
  for (int i = 1; i < N; ++i) link(read(), read());
  dep[1] = 1;
  dfs_1(1);
  dfs_2(1, 1);
  int k, m, r;
  while (Q--) {
    k = read(), m = read(), r = read();
    for (int i = 1; i <= k; ++i) tr.ins(dfn[a[i].x = read()], 1);
    for (int i = 1; i <= k; ++i) a[i].g = query(a[i].x, r);
    sort(a + 1, a + k + 1);
    f[0][0] = 1;
    for (int i = 1; i <= k; ++i)
      for (int j = 1; j <= m; ++j)
        inc(f[i][j],
            (f[i - 1][j - 1] + mul(f[i - 1][j], max(0, j - a[i].g))) % mod);
    int res = 0;
    for (int i = 1; i <= m; ++i) inc(res, f[k][i]);
    for (int i = 1; i <= k; ++i) tr.ins(dfn[a[i].x], -1);
    for (int i = 1; i <= k; ++i)
      for (int j = 1; j <= m; ++j) f[i][j] = 0;
    printf("%d\n", res);
  }
  return 0;
}
void dfs_1(int x) {
  sz[x] = 1;
  for (int i = head[x]; i; i = nxt[i])
    if (to[i] != fa[x]) {
      fa[to[i]] = x, dep[to[i]] = dep[x] + 1, dfs_1(to[i]), sz[x] += sz[to[i]];
      if (sz[to[i]] > sz[son[x]]) son[x] = to[i];
    }
}
void dfs_2(int x, int tp) {
  top[x] = tp, dfn[x] = ++cnt;
  if (son[x]) {
    dfs_2(son[x], tp);
    for (int i = head[x]; i; i = nxt[i])
      if (!dfn[to[i]]) dfs_2(to[i], to[i]);
  }
}
int read() {
  int x = 0, c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = x * 10 + c - 48, c = getchar();
  return x;
}
