#include <bits/stdc++.h>
using namespace std;
long long dp[100004][11][3];
long long mod = 1e9 + 7;
vector<int> op[100004];
long long n, m, k, x;
void dfs(int node, int pa) {
  dp[node][1][1] = 1;
  dp[node][0][0] = k - 1;
  dp[node][0][2] = m - k;
  int c;
  for (c = 0; c < op[node].size(); c++) {
    int u = op[node][c];
    if (u == pa) continue;
    dfs(u, node);
    int i, j;
    long long temp[13][3] = {0};
    for (i = 0; i <= x; i++) {
      for (j = 0; j <= x; j++) {
        if (i + j <= x) {
          temp[i + j][1] +=
              (((dp[node][i][1] % mod) * (dp[u][j][0] % mod)) % mod);
          temp[i + j][0] +=
              (((dp[node][i][0] % mod) *
                ((dp[u][j][0] + dp[u][j][1] + dp[u][j][2]) % mod) % mod) %
               mod);
          temp[i + j][2] +=
              (((dp[node][i][2] % mod) * ((dp[u][j][0] + dp[u][j][2]) % mod)) %
               mod);
        }
      }
    }
    for (i = 0; i <= x; i++)
      for (j = 0; j <= 2; j++) dp[node][i][j] = temp[i][j];
  }
}
int main() {
  cin >> n >> m;
  int i;
  for (i = 0; i < n - 1; i++) {
    int xx, y;
    cin >> xx >> y;
    op[xx].push_back(y);
    op[y].push_back(xx);
  }
  cin >> k >> x;
  dfs(1, 0);
  long long ans = 0;
  for (i = 0; i <= x; i++)
    for (int j = 0; j <= 2; j++) ans += dp[1][i][j], ans %= mod;
  cout << ans << endl;
  return 0;
}
