#include <bits/stdc++.h>
using namespace std;
const int N = 100005, X = 15, mod = 1000000007;
struct node {
  int to;
  node *next;
} p[N];
int n, m, tp, nm, dp[N][X][3], ans;
void add(int &x, int y) { x = (x + y) % mod; }
void mull(int &x, int y) { x = (1ll * x * y) % mod; }
void ins(int u, int v) {
  node *t = new node;
  t->to = v;
  t->next = p[u].next;
  p[u].next = t;
}
void dfs(int u, int fa) {
  int fg1 = 0, fg2 = 0, fg3 = 0, flag = 0;
  node *t = p[u].next;
  while (t) {
    int v = t->to;
    if (v != fa) {
      dfs(v, u);
      flag = 1;
      for (int i = 0; i <= nm; i++) {
        if (dp[v][i][0]) fg1 = fg2 = fg3 = 1;
        if (dp[v][i][2]) fg1 = fg3 = 1;
        if (dp[v][i][1]) fg1 = 1;
      }
    }
    t = t->next;
  }
  if (!flag) fg1 = fg2 = fg3 = 1;
  if (fg1) dp[u][0][0] = tp - 1;
  if (fg2) dp[u][1][1] = 1;
  if (fg3) dp[u][0][2] = m - tp;
  t = p[u].next;
  while (t) {
    int v = t->to;
    if (v != fa) {
      for (int i = nm; i >= 0; i--)
        for (int j = 0; j <= i; j++) {
          int sum = 0;
          add(sum, dp[v][j][0]);
          add(sum, dp[v][j][1]);
          add(sum, dp[v][j][2]);
          if (j)
            add(dp[u][i][0], (1ll * dp[u][i - j][0] * sum) % mod);
          else
            mull(dp[u][i][0], sum);
          sum = dp[v][j][0];
          if (j)
            add(dp[u][i][1], (1ll * dp[u][i - j][1] * sum) % mod);
          else
            mull(dp[u][i][1], sum);
          sum = 0;
          add(sum, dp[v][j][0]);
          add(sum, dp[v][j][2]);
          if (j)
            add(dp[u][i][2], (1ll * dp[u][i - j][2] * sum) % mod);
          else
            mull(dp[u][i][2], sum);
        }
    }
    t = t->next;
  }
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) p[i].next = NULL;
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    ins(x, y);
    ins(y, x);
  }
  cin >> tp >> nm;
  dfs(1, 0);
  for (int i = 0; i <= nm; i++) {
    add(ans, dp[1][i][0]);
    add(ans, dp[1][i][1]);
    add(ans, dp[1][i][2]);
  }
  cout << ans;
}
