#include <bits/stdc++.h>
using namespace std;
char buf[1 << 20], *p1, *p2;
template <class T>
inline void read(T &n) {
  char ch =
      (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
           ? 0
           : *p1++);
  T w = 1, x = 0;
  while (!isdigit(ch)) {
    if (ch == '-') w = -1;
    ch =
        (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
             ? 0
             : *p1++);
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch =
        (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
             ? 0
             : *p1++);
  }
  n = x * w;
}
const int maxn = 100005;
const int mod = 1e9 + 7;
int n, q, P[maxn], A[maxn];
int last[maxn], Next[maxn << 1], to[maxn << 1], cnt;
inline void addedge(int x, int y) {
  Next[++cnt] = last[x];
  last[x] = cnt, to[cnt] = y;
}
int Log[maxn], dep[maxn], fa[maxn][17];
int dfn[maxn], ed[maxn], tot;
void dfs(int x) {
  dfn[x] = ++tot;
  dep[x] = dep[fa[x][0]] + 1;
  for (int i = 1; i <= Log[dep[x]]; i++) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (int i = last[x]; i; i = Next[i]) {
    int v = to[i];
    if (v != fa[x][0]) {
      fa[v][0] = x;
      dfs(v);
    }
  }
  ed[x] = tot;
}
int getlca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  int l = dep[x] - dep[y];
  for (int i = Log[l]; i >= 0; i--)
    if ((l >> i) & 1) x = fa[x][i];
  if (x == y) return x;
  for (int i = Log[dep[x]]; i >= 0; i--)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
int t[maxn];
inline int lowbit(int x) { return x & (-x); }
inline int query(int x) {
  int res = 0;
  for (int i = x; i >= 1; i -= lowbit(i)) res += t[i];
  return res;
}
inline void update(int x, int val) {
  for (int i = x; i <= n; i += lowbit(i)) t[i] += val;
}
inline void change(int x, int val) {
  update(dfn[x], val);
  update(ed[x] + 1, -val);
}
inline int ask(int x, int y) {
  int lca = getlca(x, y);
  return query(dfn[x]) + query(dfn[y]) - 2 * query(dfn[lca]) + A[lca];
}
int f[305], num[maxn];
int main() {
  read(n), read(q);
  for (int i = 1, x, y; i < n; i++) {
    read(x), read(y);
    addedge(x, y), addedge(y, x);
  }
  for (int i = 2; i <= n; i++) Log[i] = Log[i >> 1] + 1;
  dfs(1);
  for (int i = 1, k, m, r; i <= q; i++) {
    read(k), read(m), read(r);
    for (int j = 1; j <= k; j++) {
      read(P[j]);
      A[P[j]] = 1, change(P[j], 1);
    }
    for (int j = 1; j <= k; j++) num[j] = ask(P[j], r) - 1;
    sort(num + 1, num + k + 1);
    memset(f, 0, sizeof(f));
    f[0] = 1;
    for (int j = 1; j <= k; j++)
      for (int l = min(j, m); l >= 0; l--) {
        if (l <= num[j]) f[l] = 0;
        f[l] = (1ll * (l - num[j]) * f[l] + f[l - 1]) % mod;
      }
    long long ans = 0;
    for (int j = 1; j <= m; j++) ans += f[j];
    for (int j = 1; j <= k; j++) A[P[j]] = 0, change(P[j], -1);
    printf("%lld\n", ans % mod);
  }
  return 0;
}
