#include <bits/stdc++.h>
const int mod = 1e9 + 7;
int a[100005], sz[100005], dep[100005], fa[100005], son[100005], top[100005],
    dfn[100005], tmp[100005];
int t[100005 << 2], tim, n, q;
long long dp[100005];
std::vector<int> e[100005];
inline bool up(int& x, const int y) { return x < y ? x = y, 1 : 0; }
inline bool down(int& x, const int y) { return x > y ? x = y, 1 : 0; }
inline void dfs1(int x, int f) {
  dep[x] = dep[fa[x] = f] + 1, sz[x] = 1;
  int mx = 0;
  for (int i : e[x])
    if (i != f) {
      dfs1(i, x);
      sz[x] += sz[i];
      if (up(mx, sz[i])) son[x] = i;
    }
}
inline void dfs2(int x, int tf) {
  top[x] = tf, dfn[x] = ++tim;
  if (!son[x]) return;
  dfs2(son[x], tf);
  for (int i : e[x])
    if (i != fa[x] && i != son[x]) dfs2(i, i);
}
inline void upd(int rt, int l, int r, int x, int v) {
  t[rt] += v;
  if (l == r) return;
  int mid = l + r >> 1;
  if (x <= mid)
    upd(rt << 1, l, mid, x, v);
  else
    upd(rt << 1 | 1, mid + 1, r, x, v);
}
inline int qry(int rt, int l, int r, int x, int y) {
  if (x <= l && r <= y) return t[rt];
  int mid = l + r >> 1, ret = 0;
  if (x <= mid) ret += qry(rt << 1, l, mid, x, y);
  if (mid < y) ret += qry(rt << 1 | 1, mid + 1, r, x, y);
  return ret;
}
inline int range_qry(int x, int y, int ret = 0) {
  while (top[x] != top[y]) {
    if (dep[top[x]] < dep[top[y]]) std::swap(x, y);
    ret += qry(1, 1, n, dfn[top[x]], dfn[x]);
    x = fa[top[x]];
  }
  if (dep[x] > dep[y]) std::swap(x, y);
  return ret + qry(1, 1, n, dfn[x], dfn[y]);
}
int main() {
  std::ios::sync_with_stdio(0);
  std::cin >> n >> q;
  for (int i = 1, iend = n - 1; i <= iend; ++i) {
    int u, v;
    std::cin >> u >> v;
    e[u].push_back(v), e[v].push_back(u);
  }
  dfs1(1, 0), dfs2(1, 1);
  while (q--) {
    int k, m, root;
    bool ty = 0;
    std::cin >> k >> m >> root;
    for (int i = 1, iend = k; i <= iend; ++i)
      std::cin >> a[i], upd(1, 1, n, dfn[a[i]], 1);
    for (int i = 1, iend = k; i <= iend; ++i) {
      tmp[i] = range_qry(a[i], root) - 1;
      if (tmp[i] >= m) ty = 1;
    }
    for (int i = 1, iend = k; i <= iend; ++i)
      upd(1, 1, n, dfn[a[i]], -1), dp[i] = 0;
    if (ty) {
      std::cout << "0\n";
      continue;
    }
    std::sort(tmp + 1, tmp + k + 1);
    dp[0] = 1;
    for (int i = 1, iend = k; i <= iend; ++i)
      for (int j = std::min(i, m), jend = 0; j >= jend; --j) {
        if (j <= tmp[i]) dp[j] = 0;
        if (j == 0) {
          dp[j] = 0;
          continue;
        }
        dp[j] = (dp[j] * (j - tmp[i]) + dp[j - 1]) % mod;
      }
    long long ans = 0;
    for (int i = 1, iend = k; i <= iend; ++i) (ans += dp[i]) %= mod;
    std::cout << ans << '\n';
  }
  return 0;
}
