#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const long long MOD = 1000000007;
inline long long add(long long a, long long b) {
  a += b;
  if (a >= MOD) a -= MOD;
  return a;
}
int n, m, K, x;
vector<int> adj[N];
long long dp1[N][11], dp2[N][11], dp3[N][11];
long long d1p[11], d2p[11], d3p[11];
void dfs(int node, int par = 0) {
  dp1[node][1] = 1;
  dp2[node][0] = K - 1;
  dp3[node][0] = m - K;
  for (auto c : adj[node]) {
    if (c != par) {
      dfs(c, node);
      memset(d1p, 0, sizeof d1p);
      memset(d2p, 0, sizeof d2p);
      memset(d3p, 0, sizeof d3p);
      for (int k = 0; k <= x; k++) {
        for (int s = k; s <= x; s++) {
          d1p[s] += (dp1[node][s - k] * dp2[c][k]) % MOD;
          d2p[s] +=
              dp2[node][s - k] * (dp1[c][k] + dp2[c][k] + dp3[c][k]) % MOD;
          d3p[s] += dp3[node][s - k] * (dp2[c][k] + dp3[c][k]) % MOD;
        }
      }
      for (int s = 0; s <= x; s++) {
        dp1[node][s] = d1p[s] % MOD;
        dp2[node][s] = d2p[s] % MOD;
        dp3[node][s] = d3p[s] % MOD;
      }
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, u, v; i < n; i++) {
    scanf("%d%d", &u, &v);
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  scanf("%d%d", &K, &x);
  dfs(1);
  long long ans = 0;
  for (int s = 0; s <= x; s++) {
    ans += dp1[1][s] + dp2[1][s] + dp3[1][s];
  }
  cout << (ans) % MOD << endl;
  return 0;
}
