#include <bits/stdc++.h>
using namespace std;
const long long inf = INT_MAX, df = 1e5 + 7, mod = 1e9 + 7;
struct edge {
  long long to, nxt;
} e[df << 2];
long long i, j, k, l, m, n, o = 1, p, q, r, s, t, u, v, w, x, y, z;
long long fa[df], dfn[df], pos[df], head[df], son[df], siz[df], top[df], cnt,
    dp[df][305], a[df], ma[df], dep[df], f[df];
void upd(long long x, long long y) {
  if (!x) return;
  for (long long i = x; i <= n; i += (i & (-i))) ma[i] += y;
}
long long qry(long long x) {
  long long ret = 0;
  for (long long i = x; i; i -= (i & (-i))) ret += ma[i];
  return ret;
}
bool cmp(long long st, long long ch) { return f[st] < f[ch]; }
long long query(long long x, long long y) {
  long long ret = 0;
  while (top[x] != top[y]) {
    if (dep[top[x]] < dep[top[y]]) swap(x, y);
    ret += qry(dfn[x]) - qry(dfn[top[x]] - 1);
    x = fa[top[x]];
  }
  if (dfn[x] > dfn[y]) swap(x, y);
  ret += qry(dfn[y]) - qry(dfn[x] - 1);
  return ret;
}
inline void add(long long u, long long v) {
  e[++o] = (edge){v, head[u]}, head[u] = o;
}
void dfs1(long long u) {
  dep[u] = dep[fa[u]] + 1;
  siz[u] = 1;
  for (long long i = head[u], v; i; i = e[i].nxt) {
    v = e[i].to;
    if (v == fa[u]) continue;
    fa[v] = u;
    dfs1(v);
    siz[u] += siz[v];
    if (siz[v] > siz[son[u]]) son[u] = v;
  }
  return;
}
void dfs2(long long u, long long x) {
  dfn[u] = ++cnt, pos[cnt] = u, top[u] = x;
  if (son[u]) dfs2(son[u], x);
  for (long long i = head[u], v; i; i = e[i].nxt) {
    v = e[i].to;
    if (v == fa[u] || v == son[u]) continue;
    dfs2(v, v);
  }
  return;
}
inline long long read() {
  long long x = 0, y = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') y = (ch == '-') ? -1 : 1, ch = getchar();
  while (ch >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
  return x * y;
}
int main() {
  n = read(), q = read();
  for (long long i = (2); i <= (n); ++i) {
    long long u = read(), v = read();
    add(u, v), add(v, u);
  }
  dfs1(1), dfs2(1, 1);
  while (q--) {
    k = read(), m = read(), r = read();
    for (long long i = (1); i <= (k); ++i) a[i] = read(), upd(dfn[a[i]], 1);
    dp[1][1] = 1;
    for (long long i = (1); i <= (k); ++i) f[a[i]] = query(a[i], r) - 1;
    sort(a + 1, a + k + 1, cmp);
    for (long long i = (2); i <= (k); ++i) {
      for (long long j = (1); j <= (min(i, m)); ++j)
        (dp[i][j] +=
         max(0ll, j - f[a[i]]) * dp[i - 1][j] % mod + dp[i - 1][j - 1]) %= mod;
    }
    long long ans = 0;
    for (long long i = (1); i <= (m); ++i) (ans += dp[k][i]) %= mod;
    printf("%lld\n", ans);
    for (long long i = (1); i <= (k); ++i) upd(dfn[a[i]], -1), f[a[i]] = 0;
    for (long long i = (1); i <= (k); ++i)
      for (long long j = (1); j <= (m); ++j) dp[i][j] = 0;
  }
}
