#include <bits/stdc++.h>
using namespace std;
long long n, m, x, k;
vector<long long> g[100100];
long long dp[100010][12][3];
vector<long long> dp1[12][3];
bool vis[100010];
long long MOD = 1000000007;
long long solve(int j, int p, int i, int xx, int ls) {
  if (xx < 0) return 0;
  if (i == g[j].size()) {
    if (xx == 0) return 1;
    return 0;
  }
  if (dp1[xx][ls][i] != -1) return dp1[xx][ls][i];
  long long sol = 0;
  long long to = g[j][i];
  if (to != p) {
    if (ls == 0) {
      for (int d = 0; d <= xx; d++) {
        sol += ((dp[to][d][0] + dp[to][d][1] + dp[to][d][2]) % MOD) *
               solve(j, p, i + 1, xx - d, ls);
        sol %= MOD;
      }
    } else if (ls == 1) {
      for (int d = 0; d <= xx; d++) {
        sol += ((dp[to][d][0]) * solve(j, p, i + 1, xx - d, ls));
        sol %= MOD;
      }
    } else {
      for (int d = 0; d <= xx; d++) {
        sol += ((dp[to][d][0] + dp[to][d][2]) % MOD) *
               solve(j, p, i + 1, xx - d, ls);
        sol %= MOD;
      }
    }
  } else {
    sol = solve(j, p, i + 1, xx, ls);
  }
  return dp1[xx][ls][i] = sol;
}
void dfs(int v, int p) {
  for (int i = 0; i < g[v].size(); i++) {
    long long to = g[v][i];
    if (to != p) {
      dfs(to, v);
    }
  }
  for (int j = 0; j <= x; j++) {
    dp1[j][0].clear();
    dp1[j][1].clear();
    dp1[j][2].clear();
    dp1[j][0].resize(g[v].size() + 1, -1);
    dp1[j][1].resize(g[v].size() + 1, -1);
    dp1[j][2].resize(g[v].size() + 1, -1);
  }
  long long dm = m - k;
  long long sm = k - 1;
  for (int j = 0; j <= x; j++) {
    dp[v][j][0] = (sm * solve(v, p, 0, j, 0)) % MOD;
    dp[v][j][2] = ((dm * solve(v, p, 0, j, 2)) % MOD);
    if (j != 0) {
      dp[v][j][1] = solve(v, p, 0, j - 1, 1) % MOD;
    }
  }
  return;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < n - 1; i++) {
    long long a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  cin >> k >> x;
  dfs(1, -1);
  long long sol = 0;
  for (int i = 0; i <= x; i++) {
    sol += dp[1][i][0];
    sol += dp[1][i][1];
    sol += dp[1][i][2];
  }
  sol %= MOD;
  cout << sol << endl;
  return 0;
}
