#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
typedef vector<int> vi;
const int maxn = 1e5 + 7;
ll n, k, h[maxn], sb[maxn], p[maxn];
vi ls[maxn];
void dfs1(int v){
for (int ss : ls[v]){
if (ss == p[v]) continue;
p[ss] = v;
dfs1(ss);
}
}
void dfs2(int v){
sb[v] = h[v];
for (int ss : ls[v]){
if (ss == p[v]) continue;
dfs2(ss);
sb[v] += sb[ss];
}
}
void dfs3(int v){
h[v] = 0;
for (int ss : ls[v]){
if (ss == p[v]) continue;
dfs3(ss);
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin >> h[i];
for (int i = 1; i < n; i++){
int x, y;
cin >> x >> y;
ls[x].pb(y);
ls[y].pb(x);
}
dfs1(1);
ll ans = 0, uk = 0;
for (int i = 1; i <= n; i++)
uk += h[i];
while(uk > k){
dfs2(1);
ll mx = 0, mxi = -1;
for (int i = 1; i <= n; i++){
if (sb[i] > mx && sb[i] <= k){
mx = sb[i];
mxi = i;
}
}
ans++;
uk -= sb[mxi];
dfs3(mxi);
}
cout << ans << "\n";
return 0;
}