#include <bits/stdc++.h>
using namespace std;
const int N = 1e5, M = 300, P = 1e9 + 7;
vector<int> e[N + 1];
bool b[N + 1];
int tot, ptr = 1, top, m, cnt, sz[N + 1], son[N + 1], fa[N + 1], d[N + 1],
         h[N + 1], dfn[N + 1], head[N + 1], to[N << 1], nxt[N << 1], S[N + 1],
         vs[N + 1], f[M + 1] = {1};
inline void add_edge(int u, int v) {
  nxt[ptr] = head[u];
  to[head[u] = ptr++] = v;
  nxt[ptr] = head[v];
  to[head[v] = ptr++] = u;
}
void dfs0(int u, int p) {
  dfn[u] = ++tot;
  sz[u] = 1;
  for (auto v : e[u])
    if (v != p) {
      fa[v] = u;
      d[v] = d[u] + 1;
      dfs0(v, u);
      sz[u] += sz[v];
      if (sz[v] > sz[son[u]]) son[u] = v;
    }
}
void dfs1(int u, int p) {
  h[u] = son[p] == u ? h[p] : u;
  if (!son[u]) return;
  dfs1(son[u], u);
  for (auto v : e[u])
    if (v != p && v != son[u]) dfs1(v, u);
}
void dfs2(int u, int p, int d) {
  if (b[u]) {
    for (int i = min(m, ++cnt); i > d; --i)
      f[i] = (f[i - 1] + 1LL * (i - d) * f[i]) % P;
    for (int i = min(m, d); i >= 0; --i) f[i] = 0;
  }
  for (int i = head[u], v; v = to[i], i; i = nxt[i])
    if (v != p) dfs2(v, u, d + b[u]);
}
int lca(int x, int y) {
  while (h[x] != h[y]) {
    if (d[h[x]] > d[h[y]])
      x = fa[h[x]];
    else
      y = fa[h[y]];
  }
  return d[x] < d[y] ? x : y;
}
int main() {
  int n, q;
  scanf("%d%d", &n, &q);
  for (int i = 1, x, y; i < n; ++i) {
    scanf("%d%d", &x, &y);
    e[x].push_back(y);
    e[y].push_back(x);
  }
  dfs0(1, 0);
  dfs1(1, 0);
  while (q--) {
    int k, r, ans = 0;
    scanf("%d%d%d", &k, &m, &r);
    for (int i = 0; i < k; ++i) scanf("%d", vs + i), b[vs[i]] = true;
    if (!b[r]) vs[k++] = r;
    sort(vs, vs + k, [](int i, int j) -> bool { return dfn[i] < dfn[j]; });
    S[top++] = vs[0];
    for (int i = 1; i < k; ++i) {
      int u = lca(S[top - 1], vs[i]);
      for (; top > 1 && d[S[top - 2]] >= d[u]; --top)
        add_edge(S[top - 1], S[top - 2]);
      if (S[top - 1] != u) {
        add_edge(S[top - 1], u);
        S[top - 1] = u;
      }
      S[top++] = vs[i];
    }
    for (; top > 1; --top) add_edge(S[top - 1], S[top - 2]);
    dfs2(r, 0, 0);
    f[0] = 1;
    for (int i = 1; i <= m; ++i) ans = (ans + f[i]) % P, f[i] = 0;
    printf("%d\n", ans);
    for (int i = 0; i < k; ++i) b[vs[i]] = false;
    for (int i = 1; i < ptr; ++i) head[to[i]] = 0;
    ptr = 1;
    cnt = top = 0;
  }
  return 0;
}
