#include <bits/stdc++.h>
using namespace std;
int dp[100005][3][12], x, k, m;
int a[3][12], b[3][12];
vector<int> q[100005];
void dfs(int cur, int par) {
  int i, j = 0, l, r, temp;
  for (i = 0; i < q[cur].size(); i++) {
    if (q[cur][i] == par) continue;
    j = 1;
    dfs(q[cur][i], cur);
  }
  if (!j) {
    dp[cur][0][0] = k - 1;
    dp[cur][1][1] = 1;
    dp[cur][2][0] = m - k;
    return;
  }
  for (i = 0; i < 3; i++) {
    for (j = 0; j <= x; j++) {
      a[i][j] = 0;
      b[i][j] = 0;
    }
  }
  for (i = 0; i < 3; i++) a[i][0] = 1;
  for (i = 0; i < q[cur].size(); i++) {
    if (q[cur][i] == par) continue;
    for (j = 0; j < 3; j++) {
      for (l = 0; l <= x; l++) {
        for (r = 0; r <= x; r++) {
          if (l + r > x) continue;
          if (j == 0) {
            temp = dp[q[cur][i]][0][r] + dp[q[cur][i]][1][r];
            if (temp >= 1000000007) temp -= 1000000007;
            temp += dp[q[cur][i]][2][r];
            if (temp >= 1000000007) temp -= 1000000007;
            b[j][l + r] += (1ll * a[j][l] * temp) % 1000000007;
            if (b[j][l + r] >= 1000000007) b[j][l + r] -= 1000000007;
          } else if (j == 1) {
            b[j][l + r] += (1ll * a[j][l] * (dp[q[cur][i]][0][r])) % 1000000007;
            if (b[j][l + r] >= 1000000007) b[j][l + r] -= 1000000007;
          } else {
            temp = dp[q[cur][i]][0][r] + dp[q[cur][i]][2][r];
            if (temp >= 1000000007) temp -= 1000000007;
            b[j][l + r] += (1ll * a[j][l] * temp) % 1000000007;
            if (b[j][l + r] >= 1000000007) b[j][l + r] -= 1000000007;
          }
        }
      }
    }
    for (j = 0; j < 3; j++) {
      for (l = 0; l <= x; l++) {
        a[j][l] = b[j][l];
        b[j][l] = 0;
      }
    }
  }
  for (l = 0; l <= x; l++) {
    dp[cur][0][l] = (1ll * a[0][l] * (k - 1)) % 1000000007;
    if (l >= 1) dp[cur][1][l] = a[1][l - 1];
    dp[cur][2][l] = (1ll * a[2][l] * (m - k)) % 1000000007;
  }
}
int main() {
  int n, i, j, ans;
  scanf("%d", &n);
  scanf("%d", &m);
  for (i = 1; i < n; i++) {
    scanf("%d", &j);
    scanf("%d", &k);
    q[j].push_back(k);
    q[k].push_back(j);
  }
  scanf("%d", &k);
  scanf("%d", &x);
  dfs(1, 0);
  ans = 0;
  for (i = 0; i < 3; i++) {
    for (j = 0; j <= x; j++) {
      ans += dp[1][i][j];
      if (ans >= 1000000007) ans -= 1000000007;
    }
  }
  printf("%d\n", ans);
  return 0;
}
