#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#define endl '\n'
//#pragma GCC optimize("Ofast")
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair < int, int >;
using pll = pair < ll, ll >;
const ll INF = 2e18;
const ll DIM = 100007;
const ll DIMQ = 2007;
const ld PI = 3.1415926535;
const int mod = 998244353;
int n, d;
vector < int > v[DIM];
int T[DIM];
int curr;
int cnt;
void dfs(int val, int prev, int dist) {
if(dist >= T[val]) cnt++;
if(cnt > 0) {
curr++;
}
if(dist + 1 <= d) {
for(auto to: v[val]) {
if(to == prev) continue;
dfs(to, val, dist + 1);
}
}
if(dist >= T[val]) cnt--;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef IloveCP
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
cin >> n >> d;
for(int i = 1; i <= n; i++) cin >> T[i];
for(int i = 1; i < n; i++) {
int v1, v2;
cin >> v1 >> v2;
v[v1].push_back(v2);
v[v2].push_back(v1);
}
for(int s = 1; s <= n; s++) {
curr = 0;
dfs(s, s, 0);
cout << curr << endl;
}
return 0;
}