#include <bits/stdc++.h>
using namespace std;
vector<int> v[100005];
long long dp[100005][15][3];
int k, m, first;
int mod = 1e9 + 7;
void dfs(int n, int f) {
  long long bag[2][15];
  long long bag1[2][15];
  long long bag2[2][15];
  memset(bag, 0, sizeof(bag));
  memset(bag1, 0, sizeof(bag1));
  memset(bag2, 0, sizeof(bag2));
  bag[0][0] = 1;
  bag1[0][0] = 1;
  bag2[0][0] = 1;
  for (vector<int>::iterator it = v[n].begin(); it != v[n].end(); it++) {
    if (*it != f) {
      dfs(*it, n);
      for (int i = first; i >= 0; i--)
        for (int j = 0; j <= first - i; j++) {
          bag[1][i + j] += bag[0][i] * (dp[*it][j][0] + dp[*it][j][2]) % mod;
          bag[1][i + j] %= mod;
          bag1[1][i + j] += bag1[0][i] *
                            (dp[*it][j][0] + dp[*it][j][1] + dp[*it][j][2]) %
                            mod;
          bag1[1][i + j] %= mod;
          bag2[1][i + j] += bag2[0][i] * (dp[*it][j][0]) % mod;
          bag2[1][i + j] %= mod;
        }
      for (int i = 0; i <= first; i++) {
        bag[0][i] = bag[1][i];
        bag[1][i] = 0;
        bag1[0][i] = bag1[1][i];
        bag1[1][i] = 0;
        bag2[0][i] = bag2[1][i];
        bag2[1][i] = 0;
      }
    }
  }
  for (int i = 0; i <= first; i++) {
    bag1[0][i] -= bag[0][i];
    bag1[0][i] = (bag1[0][i] + mod) % mod;
  }
  for (int i = 0; i <= first; i++) {
    dp[n][i][0] = bag1[0][i] * (k - 1) % mod + bag[0][i] * (k - 1) % mod;
    if (i < first) dp[n][i + 1][1] = bag2[0][i];
    dp[n][i][2] = bag[0][i] * (m - k) % mod;
  }
}
int main() {
  int n;
  scanf("%d %d", &n, &m);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    v[a].push_back(b);
    v[b].push_back(a);
  }
  memset(dp, 0, sizeof(dp));
  scanf("%d %d", &k, &first);
  dfs(1, 0);
  long long ans = 0;
  for (int i = 0; i <= first; i++) {
    ans += dp[1][i][0] + dp[1][i][1] + dp[1][i][2];
    ans %= mod;
  }
  printf("%d\n", ans);
}
