#include <bits/stdc++.h>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
using namespace std;
#define ll long long
#define pb push_back
#define all(a) a.begin(),a.end()
#define death ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
////////////////////////////////////global variables//////////////////////////////////////////////////
int n;
map<int ,vector<int>> adj;
map<int, bool> vis;
vector<int>c;
int leaves=0;
////////////////////////////////////recursion/////////////////////////////////////////////////////////
/////////////////////////////////////functions///////////////////////////////////////////////////////
bool isLeaf(int node) {
return adj[node].size() == 1;
}
void dfs(ll num,int m,int catCnt){
vis[num] = true;
if (c[num]==1) catCnt++;
else catCnt=0;
if (catCnt > m) return;
for (int i = 0; i < adj[num].size(); i++) {
int ch = adj[num][i];
if (!vis[ch]) {
dfs(ch, m, catCnt);
}
}
if (isLeaf(num)&& num!=1)
leaves++;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void neverland() {
int m; cin>>n>>m;
c.clear();
for (int i=1;i<=n;i++)
{
int cat; cin>>cat;
c.pb(cat);
}
int x,y;
int catCnt=0;
for (int i=1;i<n;i++){
cin>>x>>y;
adj[x].pb(y);
adj[y].pb(x);
}
dfs(1,m,0);
cout<<leaves<<endl;
}
int main() {
death;
long long t=1;
// cin>>t;
while(t--){
neverland();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgYWxsKGEpICBhLmJlZ2luKCksYS5lbmQoKQojZGVmaW5lIGRlYXRoIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL2dsb2JhbCB2YXJpYWJsZXMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwppbnQgbjsKbWFwPGludCAsdmVjdG9yPGludD4+IGFkajsKbWFwPGludCwgYm9vbD4gdmlzOwp2ZWN0b3I8aW50PmM7CmludCBsZWF2ZXM9MDsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vcmVjdXJzaW9uLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vZnVuY3Rpb25zLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpib29sIGlzTGVhZihpbnQgbm9kZSkgewogICAgcmV0dXJuIGFkaltub2RlXS5zaXplKCkgPT0gMTsKfQp2b2lkIGRmcyhsbCBudW0saW50IG0saW50IGNhdENudCl7CiAgICB2aXNbbnVtXSA9IHRydWU7CiAgICBpZiAoY1tudW1dPT0xKSBjYXRDbnQrKzsKICAgIGVsc2UgY2F0Q250PTA7CiAgICBpZiAoY2F0Q250ID4gbSkgcmV0dXJuOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhZGpbbnVtXS5zaXplKCk7IGkrKykgewogICAgICAgIGludCBjaCA9IGFkaltudW1dW2ldOwogICAgICAgIGlmICghdmlzW2NoXSkgewogICAgICAgICAgICBkZnMoY2gsIG0sIGNhdENudCk7CiAgICAgICAgfQogICAgfQoKICAgaWYgKGlzTGVhZihudW0pJiYgbnVtIT0xKQogICAgICAgbGVhdmVzKys7Cn0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCnZvaWQgbmV2ZXJsYW5kKCkgewogICAgaW50IG07IGNpbj4+bj4+bTsKICAgIGMuY2xlYXIoKTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykKICAgIHsKICAgICAgICBpbnQgY2F0OyBjaW4+PmNhdDsKICAgICAgICBjLnBiKGNhdCk7CiAgICB9CiAgICBpbnQgeCx5OwogICAgaW50IGNhdENudD0wOwogICAgZm9yIChpbnQgaT0xO2k8bjtpKyspewogICAgICAgIGNpbj4+eD4+eTsKICAgICAgICBhZGpbeF0ucGIoeSk7CiAgICAgICAgYWRqW3ldLnBiKHgpOwogICAgfQoKICAgIGRmcygxLG0sMCk7CiAgICBjb3V0PDxsZWF2ZXM8PGVuZGw7Cgp9CmludCBtYWluKCkgewogICAgZGVhdGg7CiAgICBsb25nIGxvbmcgdD0xOwogICAgLy8gY2luPj50OwogICAgd2hpbGUodC0tKXsKICAgICAgICBuZXZlcmxhbmQoKTsKICAgIH0KfQ==