#include <bits/stdc++.h>
using namespace std;
class intervalac {
  vector<int> v;
  int n;

 public:
  intervalac(int N) : n(N), v(vector<int>(N * 2, 0)) {}
  int sum(int i) {
    int sum = 0;
    for (i += n; i > 0; i >>= 1) sum += v[i];
    return sum;
  }
  void add(int l, int r, int d) {
    for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
      if (l & 1) v[l++] += d;
      if (r & 1) v[--r] += d;
    }
  }
};
class RMQ {
  vector<pair<int, int>> v;
  int n;

 public:
  RMQ(vector<pair<int, int>> &a)
      : n(a.size()), v(vector<pair<int, int>>(a.size() * 2)) {
    for (int i = n; i < 2 * n; i++) v[i] = a[i - n];
    for (int i = n - 1; i > 0; i--) v[i] = min(v[i << 1], v[(i << 1) | 1]);
  }
  int query(int l, int r) {
    pair<int, int> mini = {1e9, -1};
    for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
      if (l & 1) mini = min(mini, v[l++]);
      if (r & 1) mini = min(mini, v[--r]);
    }
    return mini.second;
  }
};
vector<int> e1, e2;
vector<pair<int, int>> e;
int T = 0;
vector<vector<int>> g;
void dfs(int vr, int d = 0, int p = -1) {
  e1[vr] = T++;
  e.push_back({d, vr});
  for (int i : g[vr])
    if (i != p) {
      dfs(i, d + 1, vr);
      e.push_back({d, vr});
      T++;
    }
  e2[vr] = T;
}
const long long mod = 1e9 + 7;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, q;
  cin >> n >> q;
  g.resize(n);
  e1.resize(n);
  e2.resize(n);
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    g[a - 1].push_back(b - 1);
    g[b - 1].push_back(a - 1);
  }
  dfs(0);
  RMQ rmq(e);
  intervalac in(e.size());
  vector<bool> marked(n, 0);
  while (q--) {
    int k, m, r;
    cin >> k >> m >> r;
    r--;
    vector<pair<long long, int>> a(k);
    for (int i = 0; i < k; i++) {
      cin >> a[i].second;
      a[i].second--;
      marked[a[i].second] = true;
      in.add(e1[a[i].second], e2[a[i].second], 1);
    }
    for (int i = 0; i < k; i++) {
      int lca = rmq.query(min(e1[a[i].second], e1[r]),
                          max(e1[a[i].second], e1[r]) + 1);
      a[i].first = in.sum(e1[r]) + in.sum(e1[a[i].second]) -
                   2 * in.sum(e1[lca]) + marked[lca] - 1;
    }
    sort(a.begin(), a.end());
    vector<vector<long long>> dp(k + 1, vector<long long>(m + 1, 0));
    dp[0][0] = 1;
    for (int i = 1; i <= k; i++)
      for (long long j = 1; j <= m; j++)
        dp[i][j] = (dp[i - 1][j - 1] +
                    ((dp[i - 1][j] * 1ll * (j - a[i - 1].first)) % mod)) %
                   mod;
    long long ans = 0;
    for (int j = 0; j <= m; j++) ans = (ans + dp[k][j]) % mod;
    cout << ans << "\n";
    for (int i = 0; i < k; i++) {
      marked[a[i].second] = false;
      in.add(e1[a[i].second], e2[a[i].second], -1);
    }
  }
  return 0;
}
