#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
;
const long long maxn = 3e5;
const long long maxx = 12;
const long long mod = 1e9 + 7;
long long n, m, k, x;
vector<long long> V[maxn];
long long D[maxn][maxx][3];
long long D1[maxn][maxx][3];
void dfs(long long v, long long p) {
  long long q, w, e, r;
  if (V[v].size() == 1 && v != p) {
    D[v][0][1] = k - 1;
    D[v][1][0] = 1;
    D[v][0][2] = m - k;
    return;
  }
  for (q = 0; q < V[v].size(); q++) {
    if (V[v][q] == p) continue;
    dfs(V[v][q], v);
  }
  D1[0][0][1] = k - 1;
  D1[0][1][0] = 1;
  D1[0][0][2] = m - k;
  for (q = 0; q < V[v].size(); q++) {
    if (V[v][q] == p) {
      for (w = 0; w <= x; w++) {
        for (e = 0; e < 3; e++) {
          D1[q + 1][w][e] = D1[q][w][e];
        }
      }
      continue;
    }
    for (w = 0; w <= x; w++) {
      for (e = 0; e <= w; e++) {
        for (r = 0; r < 3; r++) {
          if (r == 0) {
            D1[q + 1][w][r] += D1[q][w - e][r] * D[V[v][q]][e][1];
            D1[q + 1][w][r] %= mod;
          }
          if (r == 1) {
            D1[q + 1][w][r] +=
                D1[q][w - e][r] *
                (D[V[v][q]][e][0] + D[V[v][q]][e][1] + D[V[v][q]][e][2]);
            D1[q + 1][w][r] %= mod;
          }
          if (r == 2) {
            D1[q + 1][w][r] +=
                D1[q][w - e][r] * (D[V[v][q]][e][1] + D[V[v][q]][e][2]);
            D1[q + 1][w][r] %= mod;
          }
        }
      }
    }
  }
  for (w = 0; w <= x; w++) {
    for (r = 0; r < 3; r++) {
      D[v][w][r] = D1[V[v].size()][w][r];
    }
  }
  for (q = 0; q <= V[v].size(); q++) {
    for (w = 0; w <= x; w++) {
      for (e = 0; e < 3; e++) {
        D1[q][w][e] = 0;
      }
    }
  }
}
int main() {
  long long q, w, e, r, l, a, b;
  cin >> n >> m;
  for (q = 0; q < n - 1; q++) {
    cin >> a >> b;
    a--;
    b--;
    V[a].push_back(b);
    V[b].push_back(a);
  }
  cin >> k >> x;
  dfs(0, 0);
  long long ans = 0;
  for (q = 0; q <= x; q++) {
    ans = (ans + D[0][q][0] + D[0][q][1] + D[0][q][2]) % mod;
  }
  cout << ans;
  return 0;
}
