1 #include <cstdio>
2 #include <cmath>
3 #include <cstring>
4 #include <ctime>
5 #include <iostream>
6 #include <algorithm>
7 #include <set>
8 #include <vector>
9 #include <queue>
10 #include <typeinfo>
11 #include <map>
12 #include <stack>
13 typedef long long ll;
14 using namespace std;
15 inline ll read()
16 {
17 ll x=0,f=1;
18 char ch=getchar();
19 while(ch<‘0‘||ch>‘9‘)
20 {
21 if(ch==‘-‘)f=-1;
22 ch=getchar();
23 }
24 while(ch>=‘0‘&&ch<=‘9‘)
25 {
26 x=x*10+ch-‘0‘;
27 ch=getchar();
28 }
29 return x*f;
30 }
31 //**************************************************************************************
32
33 set<int > s;
34 int t;
35 int n,sum;
36 struct ss
37 {
38 int to,next;
39 }e[101000];
40 int sss;
41 int k,ans;
42 int head[101000];
43 int a[101000];
44 void init()
45 {
46 t=1;
47 memset(head,0,sizeof(head));
48 }
49 void add(int u,int v)
50 {
51 e[t].to=v;
52 e[t].next=head[u];
53 head[u]=t++;
54 }
55 void dfs(int x,int sum)
56 {
57 sum+=a[x];
58 if(s.count(sum-sss))ans++;
59 s.insert(sum);
60 for(int i=head[x];i;i=e[i].next)
61 {
62 dfs(e[i].to,sum);
63 }
64 s.erase(sum);
65 }
66 int hash[100005];
67 int main()
68 {
69 scanf("%d%d",&n,&sss);
70 init();
71 for(int i=1;i<=n;i++)
72 {
73 scanf("%d",&a[i]);
74 }
75 int x,y;
76 for(int i=1;i<n;i++)
77 {
78 scanf("%d%d",&x,&y);
79 add(x,y);
80 hash[y]=1;
81 }
82 for(int i=1;i<=n;i++)
83 if(!hash[i]){k=i;break;}
84 s.clear();
85 s.insert(0);
86 ans=0;
87 sum=0;
88 dfs(k,0);
89
90 cout<<ans<<endl;
91 return 0;
92 }