#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MN = 1e5 + 100;
const int MOD = 1e9 + 7;
vector<int> g[MN];
ll dp[MN][3][11];
int k, m2, m;
void dfs(int v, int p) {
  for (int u : g[v]) {
    if (u != p) dfs(u, v);
  }
  vector<vector<ll>> ex(3, vector<ll>(11, 0));
  vector<vector<ll>> cu(3, vector<ll>(11, 0));
  ex[0][0] = ex[1][0] = ex[2][0] = 1;
  for (int u : g[v]) {
    if (u == p) continue;
    cu = vector<vector<ll>>(3, vector<ll>(11, 0));
    for (int x = 0; x < 11; ++x) {
      for (int i = 0; i < 3; ++i) {
        for (int j = 0; j + x <= m2; ++j) {
          cu[0][j + x] = (cu[0][j + x] + dp[u][i][x] * ex[0][j]) % MOD;
          if (i == 0)
            cu[1][j + x] = (cu[1][j + x] + dp[u][i][x] * ex[1][j]) % MOD;
          if (i == 0 || i == 2)
            cu[2][j + x] = (cu[2][j + x] + dp[u][i][x] * ex[2][j]) % MOD;
        }
      }
    }
    swap(cu, ex);
  }
  for (int i = 0; i <= m2; ++i) {
    dp[v][0][i] = (ex[0][i] * (k - 1)) % MOD;
    if (i != 0) dp[v][1][i] = ex[1][i - 1];
    dp[v][2][i] = (ex[2][i] * (m - k)) % MOD;
  }
}
int main() {
  int n;
  cin >> n >> m;
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  cin >> k >> m2;
  dfs(1, -1);
  ll ans = 0;
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j <= m2; ++j) {
      ans = (ans + dp[1][i][j]) % MOD;
    }
  }
  cout << ans;
  return 0;
}
