#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;
#define int long long
int D;
vector<int> T;
vector<vector<int>> adjlist;
int dfs(int n, int p, int cd, int ci) {
int res = 0;
if ((ci || T[n] <= cd) && cd <= D) res++;
for (int i : adjlist[n]) {
if (i == p) continue;
res += dfs(i, n, cd + 1, (ci || T[n] <= cd));
}
return res;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int N, a, b; cin >> N >> D;
adjlist.resize(N, vector<int>());
for (int i = 0; i < N; i++) {
cin >> a;
T.push_back(a);
}
for (int i = 0; i < N - 1; i++) {
cin >> a >> b; a--, b--;
adjlist[a].push_back(b);
adjlist[b].push_back(a);
}
for (int i = 0; i < N; i++) {
cout << dfs(i, -1, 0, 0) << '\n';
}
}