#include <bits/stdc++.h>
using namespace std;
const int N = 100005, P = 1000000007;
int n, q;
vector<int> v[N];
int c[N];
inline int lowbit(int x) { return x & -x; }
void add(int x, int v) {
  while (x <= n) c[x] += v, x += lowbit(x);
}
int sum(int x) {
  int ret = 0;
  while (x) ret += c[x], x -= lowbit(x);
  return ret;
}
inline int sum(int l, int r) { return sum(r) - sum(l - 1); }
int fa[N], f[N], dep[N], top[N], sz[N], hson[N], idx, dfn[N];
void dfs1(int pos) {
  sz[pos] = 1;
  dep[pos] = dep[fa[pos]] + 1;
  for (auto &i : v[pos])
    if (i != fa[pos]) {
      fa[i] = pos;
      dfs1(i);
      sz[pos] += sz[i];
      if (sz[i] > sz[hson[pos]]) hson[pos] = i;
    }
}
void dfs2(int pos, int tp) {
  dfn[pos] = ++idx;
  top[pos] = tp;
  if (hson[pos]) dfs2(hson[pos], tp);
  for (auto &i : v[pos])
    if (i != fa[pos] && i != hson[pos]) dfs2(i, i);
}
int query(int a, int b) {
  int ans = 0;
  while (top[a] != top[b]) {
    if (dep[top[a]] < dep[top[b]]) swap(a, b);
    ans += sum(dfn[top[a]], dfn[a]);
    a = fa[top[a]];
  }
  if (dep[a] > dep[b]) swap(a, b);
  return ans + sum(dfn[a], dfn[b]);
}
int dp[N][305], kk, m, r, a[N];
void clear() {
  for (int i = 1; i <= kk; i++)
    for (int j = 1; j <= m && j <= i; j++) dp[i][j] = 0;
  for (int i = 1; i <= kk; i++) add(dfn[a[i]], -1);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> q;
  int t1, t2;
  for (int i = 1; i < n; i++) {
    cin >> t1 >> t2;
    v[t1].push_back(t2);
    v[t2].push_back(t1);
  }
  dfs1(1);
  dfs2(1, 1);
  while (q--) {
    cin >> kk >> m >> r;
    for (int i = 1; i <= kk; i++) cin >> a[i], add(dfn[a[i]], 1);
    for (int i = 1; i <= kk; i++) f[a[i]] = query(a[i], r) - 1;
    sort(a + 1, a + kk + 1, [](int a, int b) { return f[a] < f[b]; });
    dp[1][1] = 1;
    for (int i = 2; i <= kk; i++)
      for (int j = 1; j <= i && j <= m; j++)
        dp[i][j] =
            (dp[i - 1][j - 1] + 1ll * max(j - f[a[i]], 0) * dp[i - 1][j]) % P;
    cout << accumulate(dp[kk] + 1, dp[kk] + m + 1, 0ll) % P << endl;
    clear();
  }
  return 0;
}
