#include <bits/stdc++.h>
using namespace std;
int n, m, k, x;
long long dp[100000][11][3];
long long f[11][3];
vector<vector<int> > g;
const long long mod = 1e9 + 7;
void dfs(int v, int u) {
  int col = 0;
  for (int i = 0; i < g[v].size(); i++)
    if (g[v][i] != u) col++;
  dp[v][0][0] = k - 1;
  dp[v][1][1] = 1;
  dp[v][0][2] = m - k;
  for (int i = 0; i < g[v].size(); i++) {
    int to = g[v][i];
    if (to != u) {
      dfs(to, v);
      for (int cnt1 = 0; cnt1 <= x; cnt1++)
        for (int type1 = 0; type1 < 3; type1++)
          for (int cnt2 = 0; cnt2 <= x; cnt2++)
            for (int type2 = 0; type2 < 3; type2++) {
              if ((type1 == 1 && type2 == 2) || (type1 == 2 && type2 == 1) ||
                  (type1 == 1 && type2 == 1) || cnt1 + cnt2 > x)
                continue;
              f[cnt1 + cnt2][type1] +=
                  (dp[v][cnt1][type1] * dp[to][cnt2][type2]) % mod;
              f[cnt1 + cnt2][type1] %= mod;
            }
      for (int cnt = 0; cnt <= x; cnt++)
        for (int type = 0; type < 3; type++)
          dp[v][cnt][type] = f[cnt][type], f[cnt][type] = 0;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  g.resize(n);
  for (int i = 0; i < n - 1; i++) {
    int v, u;
    scanf("%d%d", &v, &u);
    g[v - 1].push_back(u - 1);
    g[u - 1].push_back(v - 1);
  }
  scanf("%d%d", &k, &x);
  dfs(0, 0);
  long long ans = 0;
  for (int cnt = 0; cnt <= x; cnt++)
    for (int type = 0; type < 3; type++) ans += dp[0][cnt][type], ans %= mod;
  printf("%I64d", ans);
  return 0;
}
