0分
#include<bits/stdc++.h>
using namespace std;
const int nn=200000;
int head[nn+10],nxt[nn*2+10],c[nn*2+10],cnt,cost[nn+10],ans;
int n,s;
int dp[nn+10][20];
int sum[nn+10][20];
void add(int u,int v){
c[cnt]=v,nxt[cnt]=head[u],head[u]=cnt++;
}
void dfs(int now,int fa){
dp[now][0]=fa;
sum[now][0]=cost[now];
for(int i=1;i<=19;i++){
if(dp[now][i-1]==0){
dp[now][i]=0;
sum[now][i]=sum[now][i-1];
}
else{
dp[now][i]=dp[ dp[now][i-1] ][i-1];
sum[now][i]=sum[now][i-1]+sum[ dp[now][i-1] ][i-1];
}
}
int k=s;
int q=now;
for(int i=19;i>=0;i--){
if(sum[q][i]==k){
ans++;
break;
}else{
if(sum[q][i]<k){
k=k-sum[q][i];
q=dp[q][i];
}
}
}
for(int i=head[now];i!=1;i=nxt[i]){
int nt=c[i];
if(nt==fa) continue;
dfs(nt,now);
}
}
int main(){
scanf("%d%d",&n,&s);
memset(head,-1,sizeof(head));
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
cost[i]=a;
}
for(int i=1;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs(1,0);
printf("%d\n",ans);
return 0;
}