#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const long long BIG = 1446803456761533460;
const int Big = 336860180;
stringstream sss;
const int maxn = 100010;
const int maxm = 301;
const int maxnlg = 18;
int n, Q;
vector<int> g[maxn];
int st[maxn], ft[maxn], pars[maxnlg][maxn];
int ver[maxn];
int fact[maxm], ifact[maxm];
int D[maxn], C[maxm], first[maxm];
struct Fenwick {
  int fen[maxn];
  vector<pair<int, int> > hist;
  void update(int i, int v) {
    for (++i; i < maxn; i += i & -i) fen[i] += v;
  }
  void add(int l, int r, int v) {
    hist.emplace_back(l, v);
    hist.emplace_back(r, -v);
    update(l, v);
    update(r, -v);
  }
  int get(int i) {
    int s = 0;
    for (++i; i > 0; i -= i & -i) s += fen[i];
    return s;
  }
  void revert() {
    for (auto x : hist) update(x.first, -x.second);
    hist.clear();
  }
} fen;
int tim = 0;
void dfs_init(int x, int par) {
  st[x] = tim++;
  pars[0][x] = par;
  for (int i = (0); i < (maxnlg - 1); ++i) pars[i + 1][x] = pars[i][pars[i][x]];
  for (auto y : g[x])
    if (y != par) {
      dfs_init(y, x);
    }
  ft[x] = tim;
}
int last_par(int v, int u) {
  for (int i = (maxnlg)-1; i >= (0); --i) {
    if (st[pars[i][v]] > st[u]) v = pars[i][v];
  }
  return v;
}
bool a_subt_b(int a, int b) { return st[b] < st[a] && ft[a] <= ft[b]; }
int powM(int a, int b) {
  int r = 1;
  while (b) {
    if (b & 1) r = (1LL * (r) * (a)) % MOD;
    a = (1LL * (a) * (a)) % MOD;
    b >>= 1;
  }
  return r;
}
void MAIN() {
  fact[0] = 1;
  for (int i = (0); i < (maxm - 1); ++i)
    fact[i + 1] = 1LL * fact[i] * (i + 1) % MOD;
  ifact[maxm - 1] = powM(fact[maxm - 1], MOD - 2);
  for (int i = (maxm - 1) - 1; i >= (0); --i)
    ifact[i] = 1LL * ifact[i + 1] * (i + 1) % MOD;
  cin >> n >> Q;
  for (int i = (0); i < (n - 1); ++i) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    g[a].emplace_back(b), g[b].emplace_back(a);
  }
  dfs_init(0, 0);
  for (int q = (0); q < (Q); ++q) {
    int k, m, r;
    cin >> k >> m >> r;
    --r;
    for (int i = (0); i < (k); ++i) cin >> ver[i], --ver[i];
    for (int i = (0); i < (k); ++i) {
      if (ver[i] == r)
        fen.add(0, n, 1);
      else if (a_subt_b(r, ver[i])) {
        int p = last_par(r, ver[i]);
        fen.add(0, n, 1);
        fen.add(st[p], ft[p], -1);
      } else
        fen.add(st[ver[i]], ft[ver[i]], 1);
    }
    int mxd = 0;
    for (int i = (0); i < (k); ++i) {
      mxd = max(mxd, (D[i] = fen.get(st[ver[i]])));
    }
    fen.revert();
    int ans = 0;
    for (int t = (mxd); t < (m + 1); ++t) {
      C[t] = 1;
      for (int i = (0); i < (k); ++i)
        C[t] = (1LL * (C[t]) * (t - D[i] + 1)) % MOD;
    }
    for (int t = (mxd); t < (m + 1); ++t) {
      first[t] = 1LL * C[t] * ifact[t] % MOD;
      for (int i = (mxd); i < (t); ++i) {
        int v = 1LL * first[i] * ifact[t - i] % MOD;
        first[t] = (first[t] + (MOD - v)) % MOD;
      }
      ans = (ans + (first[t])) % MOD;
    }
    cout << ans << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(10);
  sss << R"(
7 2
5 4
2 6
5 3
1 2
7 5
4 6
3 1 2 7 4 3
3 1 4 6 2 1
    )";
  MAIN();
  return 0;
}
