rt
#include<bits/stdc++.h>
using namespace std;
vector<int>a[1005];
int n,k,ans;bool b[1005];
int dfs(int f,int x,int cnt0,int cnt1){
if(cnt1>k) return cnt0+cnt1-1;
int len=a[x].size(),cnt=-1;
for(int i=0;i<len;i++){
if(a[x][i]==f) continue;
int t;t=dfs(x,i,cnt0+(!b[a[x][i]]),cnt1+b[a[x][i]]);
cnt=max(cnt,t);
}return cnt;
}
int main(){
ios::sync_with_stdio(NULL);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<n;i++){
int u,v;cin>>u>>v;
a[u].push_back(v);
a[v].push_back(u);
}
for(int i=1;i<=n;i++){
int p;p=dfs(0,i,!b[i],b[i]);
ans=max(ans,p);
}cout<<ans;
return 0;
}