#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 10;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
long long poww(long long a, long long b, long long md) {
  return (!b ? 1
             : (b & 1 ? a * poww(a * a % md, b / 2, md) % md
                      : poww(a * a % md, b / 2, md) % md));
}
long long dp[3][MAXN][11], k, x, m, mark[MAXN];
vector<long long> adj[MAXN];
void dfs(long long v) {
  mark[v] = 1;
  dp[0][v][0] = k - 1;
  for (int j = 1; j <= x; j++) {
    dp[0][v][j] = 0;
  }
  dp[1][v][0] = 0;
  dp[1][v][1] = 1;
  for (int i = 2; i <= x; i++) {
    dp[1][v][i] = 0;
  }
  dp[2][v][0] = m - k;
  for (int i = 1; i <= x; i++) {
    dp[2][v][i] = 0;
  }
  for (auto u : adj[v]) {
    if (!mark[u]) {
      dfs(u);
      long long c[3][11];
      for (int i = 0; i <= x; i++) {
        c[0][i] = 0, c[1][i] = 0, c[2][i] = 0;
      }
      for (int i = 0; i <= x; i++) {
        for (int j = 0; j <= x - i; j++) {
          if (i == 0) {
            c[0][j + i] = ((dp[0][u][i] + dp[1][u][i] + dp[2][u][i]) % MOD *
                           dp[0][v][j]) %
                          MOD;
            c[1][j + i] = (dp[0][u][i] * dp[1][v][j]) % MOD;
            c[2][j + i] =
                ((dp[0][u][i] + dp[2][u][i]) % MOD * dp[2][v][j]) % MOD;
            continue;
          }
          c[0][j + i] =
              (c[0][j + i] +
               ((dp[0][u][i] + dp[1][u][i] + dp[2][u][i]) % MOD * dp[0][v][j]) %
                   MOD) %
              MOD;
          c[1][j + i] = (c[1][j + i] + (dp[0][u][i] * dp[1][v][j]) % MOD) % MOD;
          c[2][j + i] =
              (c[2][j + i] +
               ((dp[0][u][i] + dp[2][u][i]) % MOD * dp[2][v][j]) % MOD) %
              MOD;
        }
      }
      for (int i = 0; i <= x; i++) {
        dp[0][v][i] = c[0][i];
        dp[1][v][i] = c[1][i];
        dp[2][v][i] = c[2][i];
      }
    }
  }
}
int main() {
  long long n;
  cin >> n >> m;
  for (int i = 1; i < n; i++) {
    long long u, v;
    cin >> u >> v;
    adj[v].push_back(u);
    adj[u].push_back(v);
  }
  cin >> k >> x;
  dfs(1);
  long long ans = 0;
  for (int i = 0; i <= x; i++) {
    ans += dp[0][1][i] + dp[1][1][i] + dp[2][1][i];
    ans = ans % MOD;
  }
  cout << ans;
}
