#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:171088640")
using namespace std;
const int MOD = 1000000007;
const int INF = 1000000007;
const long double EPS = 1e-6;
const int HASH_POW = 29;
const long double PI = acos(-1.0);
mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
long long rndNext(long long l, long long r) {
  uniform_int_distribution<long long> foo(l, r);
  return foo(rnd);
}
double workTime() { return double(clock()) / CLOCKS_PER_SEC; }
void my_return(int code) { exit(code); }
int n, m, k, x, cnt[3];
vector<int> G[100010];
int dp[100010][3][11];
void dfs(int v, int par = -1) {
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j <= x; ++j) {
      dp[v][i][j] = 0;
    }
  }
  dp[v][0][0] = cnt[0];
  dp[v][1][1] = cnt[1];
  dp[v][2][0] = cnt[2];
  for (int q = 0; q < G[v].size(); ++q) {
    int to = G[v][q];
    if (to != par) {
      dfs(to, v);
      int tmp[3][11];
      memset(tmp, 0, sizeof tmp);
      for (int sum1 = 0; sum1 <= x; ++sum1) {
        for (int sum2 = 0; sum2 <= x - sum1; ++sum2) {
          int foo = dp[v][0][sum1];
          int bar = dp[to][0][sum2];
          bar = (bar + dp[to][1][sum2]) % MOD;
          bar = (bar + dp[to][2][sum2]) % MOD;
          tmp[0][sum1 + sum2] = (tmp[0][sum1 + sum2] + foo * 1ll * bar) % MOD;
          foo = dp[v][1][sum1];
          bar = dp[to][0][sum2];
          tmp[1][sum1 + sum2] = (tmp[1][sum1 + sum2] + foo * 1ll * bar) % MOD;
          foo = dp[v][2][sum1];
          bar = dp[to][0][sum2];
          bar = (bar + dp[to][2][sum2]) % MOD;
          tmp[2][sum1 + sum2] = (tmp[2][sum1 + sum2] + foo * 1ll * bar) % MOD;
        }
      }
      for (int i = 0; i < 3; ++i) {
        for (int j = 0; j <= x; ++j) {
          dp[v][i][j] = tmp[i][j];
        }
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  scanf("%d %d", &n, &m);
  for (int i = 1; i < n; ++i) {
    int u, v;
    scanf("%d %d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  scanf("%d %d", &k, &x);
  cnt[0] = k - 1;
  cnt[1] = 1;
  cnt[2] = m - k;
  dfs(1);
  int ans = 0;
  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j <= x; ++j) {
      ans = (ans + dp[1][i][j]) % MOD;
    }
  }
  printf("%d\n", ans);
  my_return(0);
}
