#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
struct edge {
  int to, next;
} e[N * 2];
int head[N], ecnt;
const int mod = 1e9 + 7;
inline void adde(int from, int to) {
  e[++ecnt] = (edge){to, head[from]}, head[from] = ecnt;
  e[++ecnt] = (edge){from, head[to]}, head[to] = ecnt;
}
int dfn[N], dfsn, fa[N][18], dep[N], ed[N];
void dfs(int u, int f) {
  dep[u] = dep[f] + 1, dfn[u] = ++dfsn, fa[u][0] = f;
  for (int i = 1; i <= 17; i++) fa[u][i] = fa[fa[u][i - 1]][i - 1];
  for (int i = head[u]; i; i = e[i].next)
    if (e[i].to != f) dfs(e[i].to, u);
  ed[u] = dfsn;
}
int tree[N], n;
inline void update(int x, int y) {
  for (; x <= n; x += x & -x) tree[x] += y;
}
inline int query(int x) {
  int res = 0;
  for (; x; x -= x & -x) res += tree[x];
  return res;
}
int dp[N][310], rt, d[N], a[N], id[N];
inline int LCA(int a, int b) {
  if (dep[a] < dep[b]) swap(a, b);
  for (int i = 17; i >= 0; i--)
    if (dep[fa[a][i]] >= dep[b]) a = fa[a][i];
  if (a == b) return a;
  for (int i = 17; i >= 0; i--)
    if (fa[a][i] != fa[b][i]) a = fa[a][i], b = fa[b][i];
  return fa[a][0];
}
inline int dis(int a, int b) { return dep[a] + dep[b] - 2 * dep[LCA(a, b)]; }
bool cmp(int a, int b) { return d[a] < d[b]; }
inline int que(int a) {
  int lca = LCA(a, rt);
  return query(dfn[a]) - query(dfn[lca]) + query(dfn[rt]) -
         query(dfn[fa[lca][0]]);
}
int main() {
  int q;
  scanf("%d%d", &n, &q);
  for (int i = 1, a, b; i < n; i++) scanf("%d%d", &a, &b), adde(a, b);
  dfs(1, 0);
  while (q--) {
    int m, k;
    scanf("%d%d%d", &k, &m, &rt);
    for (int i = 1; i <= k; i++)
      scanf("%d", &a[i]), d[i] = dis(a[i], rt), id[i] = i, update(dfn[a[i]], 1),
                          update(ed[a[i]] + 1, -1);
    sort(id + 1, id + k + 1, cmp);
    for (int i = 1; i <= k; i++)
      for (int j = 1; j <= m; j++) dp[i][j] = 0;
    dp[0][0] = 1;
    for (int i = 1; i <= k; i++) {
      int t = que(a[id[i]]) - 1;
      for (int j = t; j <= m && j <= i; j++)
        dp[i][j] = (dp[i - 1][j - 1] + (long long)dp[i - 1][j] * (j - t)) % mod;
    }
    int res = 0;
    for (int i = 1; i <= m; i++) res = (res + dp[k][i]) % mod;
    for (int i = 1; i <= k; i++) update(dfn[a[i]], -1), update(ed[a[i]] + 1, 1);
    printf("%d\n", res);
  }
}
