#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
inline int add(int x, int y) {
  x += y;
  if (x >= mod) x -= mod;
  return x;
}
inline int sub(int x, int y) {
  x -= y;
  if (x < 0) x += mod;
  return x;
}
inline int mul(int x, int y) { return (x * 1ll * y) % mod; }
inline int powr(int a, long long b) {
  int x = 1 % mod;
  while (b) {
    if (b & 1) x = mul(x, a);
    a = mul(a, a);
    b >>= 1;
  }
  return x;
}
inline int inv(int a) { return powr(a, mod - 2); }
const int N = 1e5 + 10;
int dp[3][11][N];
int dp2[2][2][11], dp3[2][2][11];
vector<int> con[N];
int n, m, k, x;
void ADD(int &a, int b) {
  a += b;
  if (a >= mod) a -= mod;
}
void dfs(int s, int p) {
  for (int v : con[s]) {
    if (v != p) {
      dfs(v, s);
    }
  }
  memset(dp2, 0, sizeof dp2);
  dp2[0][0][0] = 1;
  int cnt = 0;
  for (int v : con[s]) {
    if (v != p) {
      memcpy(dp3, dp2, sizeof dp3);
      memset(dp2, 0, sizeof dp2);
      cnt++;
      for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
          for (int l = 0; l <= x; l++) {
            int val = dp3[i][j][l];
            for (int num = 0; num + l <= x; num++) {
              int total = num + l;
              ADD(dp2[i][j][total], mul(val, dp[0][num][v]));
              ADD(dp2[i | 1][j][total], mul(val, dp[1][num][v]));
              ADD(dp2[i][j | 1][total], mul(val, dp[2][num][v]));
            }
          }
        }
      }
    }
  }
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      for (int l = 0; l <= x; l++) {
        int val = dp2[i][j][l];
        if (!j && !i && l + 1 <= x) {
          ADD(dp[1][l + 1][s], val);
        }
        ADD(dp[0][l][s], mul(k - 1, val));
        if (!i) ADD(dp[2][l][s], mul(m - k, val));
      }
    }
  }
}
int main() {
  scanf("%d", &n);
  scanf("%d", &m);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d", &u);
    scanf("%d", &v);
    con[u].push_back(v);
    con[v].push_back(u);
  }
  scanf("%d", &k);
  scanf("%d", &x);
  dfs(1, 0);
  int ans = 0;
  for (int j = 0; j < 3; j++)
    for (int i = 0; i <= x; i++) ans = add(ans, dp[j][i][1]);
  printf("%d", ans);
}
