#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
const int LGS = 18;
long long qpow(long long a, long long b) {
  long long res = 1;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
struct graph {
  int head[maxn], nxt[maxn << 1], to[maxn << 1], w[maxn << 1], sz;
  void init() { memset(head, -1, sizeof(head)); }
  graph() { init(); }
  void push(int a, int b, int c = 0) {
    nxt[sz] = head[a], to[sz] = b, w[sz] = c, head[a] = sz++;
  }
  int& operator[](const int a) { return to[a]; }
} g;
int dep[maxn], a[maxn], pre[maxn][20], h[maxn], dfn[maxn], tot;
void dfs(int now, int fa) {
  dep[now] = dep[fa] + 1;
  dfn[now] = ++tot;
  pre[now][0] = fa;
  for (int i = 1; i <= LGS; ++i) {
    pre[now][i] = pre[pre[now][i - 1]][i - 1];
  }
  for (int i = g.head[now]; ~i; i = g.nxt[i]) {
    if (g[i] != fa) {
      dfs(g[i], now);
    }
  }
}
int lca(int x, int y) {
  if (dep[x] > dep[y]) swap(x, y);
  for (int i = LGS; i >= 0; --i) {
    if (dep[pre[y][i]] >= dep[x]) y = pre[y][i];
  }
  if (x == y) return x;
  for (int i = LGS; i >= 0; --i) {
    if (pre[x][i] != pre[y][i]) {
      x = pre[x][i], y = pre[y][i];
    }
  }
  return pre[x][0];
}
int node[maxn], stk[maxn];
bool vis[maxn];
long long dp[maxn][305];
int k, m, r, kk;
long long ans;
int idx;
bool cmp(int a, int b) { return dfn[a] < dfn[b]; }
void solve(int now, int pre, int cnt) {
  if (vis[now]) {
    idx++;
    for (int i = 1; i <= m && i <= idx; ++i) {
      if (i > cnt)
        dp[idx][i] =
            (dp[idx - 1][i - 1] + dp[idx - 1][i] * (i - cnt) % mod) % mod;
      else
        dp[idx][i] = 0;
    }
    cnt++;
    if (idx == kk) {
      for (int i = 1; i <= m; ++i) ans += dp[idx][i];
      ans %= mod;
      return;
    }
  }
  for (int i = g.head[now]; ~i; i = g.nxt[i]) {
    if (g[i] == pre) continue;
    solve(g[i], now, cnt);
  }
}
int main() {
  int n, q;
  scanf("%d%d", &n, &q);
  for (int i = 1, a, b; i < n; ++i) {
    scanf("%d%d", &a, &b);
    g.push(a, b);
    g.push(b, a);
  }
  dfs(1, 0);
  while (q--) {
    scanf("%d%d%d", &k, &m, &r);
    bool fd = false;
    idx = 0;
    ans = 0;
    kk = k;
    for (int i = 1; i <= k; ++i) {
      scanf("%d", &node[i]);
      if (node[i] == r) fd = true;
      vis[node[i]] = 1;
    }
    if (!fd) {
      node[++k] = r;
    }
    sort(node + 1, node + 1 + k, cmp);
    int top = 0;
    g.sz = 0;
    g.head[1] = -1;
    stk[top = 1] = 1;
    for (int i = 1; i <= k; ++i) {
      if (node[i] == 1) continue;
      int l = lca(stk[top], node[i]);
      if (l != stk[top]) {
        while (dfn[l] < dfn[stk[top - 1]]) {
          g.push(stk[top - 1], stk[top]);
          g.push(stk[top], stk[top - 1]);
          top--;
        }
        if (stk[top - 1] != l) {
          g.head[l] = -1;
          g.push(l, stk[top], 0);
          g.push(stk[top], l);
          stk[top] = l;
        } else {
          int tmp = stk[top];
          g.push(l, stk[top--]);
          g.push(tmp, l);
        }
      }
      g.head[node[i]] = -1, stk[++top] = node[i];
    }
    dp[0][0] = 1;
    for (int i = 1; i < top; ++i) {
      g.push(stk[i], stk[i + 1]);
      g.push(stk[i + 1], stk[i]);
    }
    solve(r, 0, 0);
    for (int i = 1; i <= k; ++i) vis[node[i]] = 0;
    printf("%lld\n", ans);
  }
  return 0;
}
