#include <bits/stdc++.h>
using namespace std;
long long n, first, second, k, m, dp[100005][15][3], mod = 1e9 + 7, ans;
vector<int> g[100005];
void DFS(int nod, int p) {
  long long t[15][3], f[15][3];
  for (int i = 0; i <= first; i++) {
    for (int j = 0; j < 3; j++) {
      t[i][j] = 0;
      f[i][j] = 0;
    }
  }
  t[0][0] = 1;
  t[0][1] = 1;
  t[0][2] = 1;
  for (int i : g[nod]) {
    if (i == p) continue;
    DFS(i, nod);
    for (int j = 0; j <= first; j++) {
      for (int d = 0; d <= j; d++) {
        f[j][0] += (t[j - d][0] * (dp[i][d][0] + dp[i][d][1] + dp[i][d][2]));
        f[j][0] %= mod;
        f[j][1] += (t[j - d][1] * dp[i][d][0]);
        f[j][1] %= mod;
        f[j][2] += (t[j - d][2] * (dp[i][d][0] + dp[i][d][2]));
        f[j][2] %= mod;
      }
    }
    for (int j = 0; j <= first; j++) {
      for (int k = 0; k < 3; k++) {
        t[j][k] = f[j][k];
        f[j][k] = 0;
      }
    }
  }
  for (int i = 0; i <= first; i++) {
    dp[nod][i][0] = (t[i][0] * (k - 1)) % mod;
    if (i) dp[nod][i][1] = t[i - 1][1];
    dp[nod][i][2] = (t[i][2] * (m - k)) % mod;
  }
}
int32_t main() {
  ios_base ::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cin >> n >> m;
  for (int i = 1; i < n; i++) {
    cin >> first >> second;
    g[first].push_back(second);
    g[second].push_back(first);
  }
  cin >> k >> first;
  DFS(1, -1);
  for (int i = 0; i <= first; i++) {
    ans += (dp[1][i][0] + dp[1][i][1] + dp[1][i][2]);
    ans %= mod;
  }
  cout << ans;
}
