#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
vector<int> g[111111];
long long dp[111111][15][5];
int n;
long long m;
long long k, lim;
void upd(long long &x, long long y) {
  y %= mod;
  x += y;
  x %= mod;
}
void upd(long long &x) { x %= mod; }
void dfs(int v, int p) {
  dp[v][0][0] = m - k;
  dp[v][1][1] = 1;
  dp[v][0][2] = k - 1;
  for (auto u : g[v]) {
    if (u == p) continue;
    dfs(u, v);
    for (int j = lim; j >= 0; j--) {
      for (int l = lim - j; l >= 0; l--) {
        int tot = j + l;
        if (l == 0) {
          dp[v][tot][0] *= (dp[u][l][0] + dp[u][l][2]);
          dp[v][tot][1] *= dp[u][l][2];
          dp[v][tot][2] *= (dp[u][l][0] + dp[u][l][1] + dp[u][l][2]);
          upd(dp[v][tot][0]);
          upd(dp[v][tot][1]);
          upd(dp[v][tot][2]);
        } else {
          upd(dp[v][tot][0], dp[v][j][0] * (dp[u][l][0] + dp[u][l][2]));
          upd(dp[v][tot][1], dp[v][j][1] * (dp[u][l][2]));
          upd(dp[v][tot][2],
              dp[v][j][2] * (dp[u][l][0] + dp[u][l][1] + dp[u][l][2]));
        }
      }
    }
  }
}
int main() {
  cin >> n >> m;
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  cin >> k >> lim;
  dfs(1, 0);
  long long ans = 0;
  for (int i = 0; i <= lim; i++) {
    upd(ans, dp[1][i][0]);
    upd(ans, dp[1][i][1]);
    upd(ans, dp[1][i][2]);
  }
  cout << ans << endl;
  return 0;
}
