#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
long long POW(long long a, long long b, long long MMM = MOD) {
  long long ret = 1;
  for (; b; b >>= 1, a = (a * a) % MMM)
    if (b & 1) ret = (ret * a) % MMM;
  return ret;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) {
  if (a == 0 || b == 0) return a + b;
  return a * (b / gcd(a, b));
}
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
int ddx[] = {0, 0, 1, 1, 1, -1, -1, -1}, ddy[] = {1, -1, 1, 0, -1, 1, 0, -1};
long long d[100001][3][11];
long long a[3][11], b[3][11];
vector<int> v[100001];
int n, m, k, x;
void dfs(int N, int p) {
  bool ok = 0;
  for (int next : v[N]) {
    if (next == p) continue;
    ok = 1;
    dfs(next, N);
  }
  if (!ok) {
    d[N][0][0] = k - 1;
    d[N][1][1] = 1;
    d[N][2][0] = m - k;
    return;
  }
  memset(a, 0, sizeof(a));
  ;
  memset(b, 0, sizeof(b));
  ;
  for (int(i) = (0); (i) <= (2); (i) += (1)) a[i][0] = 1;
  for (int next : v[N]) {
    if (next == p) continue;
    for (int(l) = (0); (l) <= (x); (l) += (1))
      for (int(r) = (0); (r) <= (x); (r) += (1)) {
        if (l + r > x) continue;
        long long t = (d[next][0][r] + d[next][1][r] + d[next][2][r]) % MOD;
        b[0][l + r] = (b[0][l + r] + a[0][l] * t) % MOD;
        t = d[next][0][r];
        b[1][l + r] = (b[1][l + r] + a[1][l] * t) % MOD;
        t = (d[next][0][r] + d[next][2][r]) % MOD;
        b[2][l + r] = (b[2][l + r] + a[2][l] * t) % MOD;
      }
    for (int(i) = (0); (i) <= (2); (i) += (1))
      for (int(j) = (0); (j) <= (x); (j) += (1)) a[i][j] = b[i][j], b[i][j] = 0;
  }
  for (int(l) = (0); (l) <= (x); (l) += (1)) {
    d[N][0][l] = (a[0][l] * (k - 1)) % MOD;
    if (l > 0) d[N][1][l] = a[1][l - 1];
    d[N][2][l] = (a[2][l] * (m - k)) % MOD;
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int(i) = (2); (i) <= (n); (i) += (1)) {
    int x, y;
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  scanf("%d%d", &k, &x);
  dfs(1, -1);
  long long ans = 0;
  for (int(i) = (0); (i) <= (2); (i) += (1))
    for (int(j) = (0); (j) <= (x); (j) += (1)) ans = (ans + d[1][i][j]) % MOD;
  printf("%lld", ans);
}
