#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
using namespace std;
#define intt long long
#define el cout<<'\n'
intt n,m;
map<intt,vector<intt> > pos;
vector<intt> cur;
intt dfs(intt num,intt tmp) {
if(cur[num]+tmp>m&&cur[num]==1) return 0;
else {
if(pos[num].empty()) {
if(num!=1) return 1;
else return 0;
}else {
intt flag=tmp,ans=0;
if(cur[num]) flag++;
else flag=0;
for(intt i=0;i<pos[num].size();i++) {
ans+=dfs(pos[num][i],flag);
}
return ans;
}
}
}
int main() {
cin>>n>>m;
cur.push_back(0);
for(intt i=1;i<=n;i++) {
intt number;
cin>>number;
cur.push_back(number);
}
for(intt i=1;i<n;i++) {
intt a,b;
cin>>a>>b;
pos[a].push_back(b);
}
intt ans=dfs(1,0);
cout<<ans;
el;
return 0;
}