#include <bits/stdc++.h>
using namespace std;
int cnt = 0;
int n, m;
vector<vector<int> > adj_list(100002);
int cats[100002];
bool vis[100002];
void dfs(int i, int fear) {
  if (vis[i]) return;
  if (fear > m) return;
  vis[i] = true;
  if (fear <= m) {
    bool flag = false;
    for (int j = 0; j < adj_list[i].size(); j++) {
      if (!vis[adj_list[i][j]]) {
        flag = true;
        if (cats[adj_list[i][j]])
          dfs(adj_list[i][j], fear + 1);
        else
          dfs(adj_list[i][j], 0);
      }
    }
    if (!flag) {
      cnt++;
    }
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> cats[i];
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    adj_list[x].push_back(y);
    adj_list[y].push_back(x);
  }
  int fear = 0;
  if (cats[1]) fear++;
  cnt = 0;
  memset(vis, false, sizeof vis);
  dfs(1, fear);
  cout << cnt;
}
