#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
long long mod = 1e9 + 7;
long long n, m, x, k;
vector<long long> bro[N + 7];
long long dp[N + 7][5][15];
long long pd[5][15];
void add(long long& p, long long q) {
  p += q;
  if (p > mod) p -= mod;
}
void mul(long long& p, long long q) {
  p *= q;
  p %= mod;
}
void go(long long u, long long p) {
  dp[u][0][0] = k - 1;
  dp[u][1][1] = 1;
  dp[u][2][0] = m - k;
  for (int i = 0; i < bro[u].size(); i++) {
    long long v = bro[u][i];
    if (v == p) {
      continue;
    }
    go(v, u);
    for (int j = 0; j < 3; j++)
      for (int k = 0; k <= x; k++) pd[j][k] = 0;
    for (int cx = 0; cx <= x; cx++) {
      for (int ty = 0; ty < 3; ty++) {
        if (dp[u][ty][cx] == 0) {
          continue;
        }
        long long utc = dp[u][ty][cx];
        for (int ncx = 0; ncx + cx <= x; ncx++) {
          for (int nty = 0; nty < 3; nty++) {
            if ((ty == 1 || nty == 1) && (ty + nty > 1)) {
              continue;
            }
            long long vtc = dp[v][nty][ncx];
            mul(vtc, utc);
            if (vtc > 0) add(pd[ty][cx + ncx], vtc);
          }
        }
      }
    }
    for (int j = 0; j < 3; j++)
      for (int k = 0; k <= x; k++) dp[u][j][k] = pd[j][k];
  }
}
int main() {
  scanf("%lld %lld", &n, &m);
  long long u, v;
  for (int i = 1; i < n; i++) {
    scanf("%lld %lld", &u, &v);
    bro[u].push_back(v);
    bro[v].push_back(u);
  }
  scanf("%lld %lld", &k, &x);
  go(1, 0);
  long long ans = 0;
  for (int i = 0; i < 3; i++)
    for (int j = 0; j <= x; j++) add(ans, dp[1][i][j]);
  printf("%lld\n", ans);
  return 0;
}
