#include <bits/stdc++.h>
using namespace std;
int BFS(vector<vector<int> > v, int pocetni, vector<int> &macka, int m) {
  vector<bool> posjecen(v.size());
  for (int i = 0; i < posjecen.size(); i++) {
    posjecen[i] = false;
  }
  queue<int> Q;
  Q.push(pocetni);
  posjecen[pocetni] = true;
  vector<int> broj_macaka(v.size());
  broj_macaka[pocetni] = 0;
  if (macka[pocetni] == 1) {
    broj_macaka[pocetni] = 1;
  }
  int rez = 0;
  while (!Q.empty()) {
    int trenutni = Q.front();
    Q.pop();
    if (broj_macaka[trenutni] > m) {
      continue;
    }
    if (v[trenutni].size() <= 1 && trenutni != pocetni) {
      rez++;
    }
    for (int i = 0; i < v[trenutni].size(); i++) {
      if (!posjecen[v[trenutni][i]]) {
        Q.push(v[trenutni][i]);
        posjecen[v[trenutni][i]] = true;
        if (macka[v[trenutni][i]] == 1) {
          broj_macaka[v[trenutni][i]] = broj_macaka[trenutni] + 1;
        } else {
          broj_macaka[v[trenutni][i]] = 0;
        }
      }
    }
  }
  return rez;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<vector<int> > v(100001);
  vector<int> macka(100001);
  for (int i = 1; i <= n; i++) {
    cin >> macka[i];
  }
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  int broj = BFS(v, 1, macka, m);
  cout << broj << endl;
  return 0;
}
