#include <bits/stdc++.h>
using namespace std;
const int mxN = 7e4;
using pii = pair<int, int>;
using ll = long long;
vector<pair<int, ll>> adj[mxN];
int n;
ll k;
int sz[mxN];
ll ans[mxN];
int calc_sz(int v, int p) {
sz[v] = 1;
for (auto [u, _]: adj[v]) if (u!=p) sz[v] += calc_sz(u, v);
return sz[v];
}
void dfs(int v, int p, ll dist) {
for (auto [u, w]: adj[v]) if (u!=p) {
ll new_dist = dist;
if (dist+w>k) {
ans[v]+=sz[u];
new_dist = 0;
}
dfs(u, v, new_dist+w);
}
}
void subtask1() {
for (int i=0; i<n; i++) {
calc_sz(i, -1);
dfs(i, -1, 0);
}
}
int dp[mxN][11];
int add_dp(int u, int v, int w, int sgn) {
int cnt = 0;
for (int i=0; i<=k-w; i++) {
dp[v][i+w] += sgn*dp[u][i];
}
for (int i=k-w+1; i<=k; i++) {
cnt += dp[u][i];
}
dp[v][w] += sgn*cnt;
return cnt;
}
void dfs1(int v, int p) {
dp[v][0] = 1;
for (auto [u, w]: adj[v]) if (u!=p) {
dfs1(u, v);
int cnt = add_dp(u, v, w, 1);
ans[u] += 1ll*(n-sz[u])*cnt;
}
}
void dfs2(int v, int p) {
for (auto [u, w]: adj[v]) if (u!=p) {
add_dp(u, v, w, -1);
int cnt = 0;
for (int i=0; i<=k-w; i++) {
dp[u][i+w] += dp[v][i];
}
for (int i=k-w+1; i<=k; i++) {
cnt += dp[v][i];
}
dp[u][w] += cnt;
ans[v] += 1ll*(sz[u])*cnt;
dfs2(u,v );
for (int i=0; i<=k-w; i++) {
dp[u][i+w] -= dp[v][i];
}
dp[u][w] -= cnt;
add_dp(u, v, w, 1);
}
}
void subtask5() {
calc_sz(0, -1);
dfs1(0, -1);
//cout << "FIRST DONE" << endl;
dfs2(0, -1);
}
vector<int> ord;
void subtask3() {
vector<
}
void solve() {
cin >> n >> k;
for (int i=0; i<n-1; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
if (n<=1000) subtask1();
else subtask5();
for (int i=0; i<n; i++) cout << ans[i] << ' ';
cout << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
}