#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))
const int INF = 1e7;
const int N = 2e5 + 7;
int n , k , cnt = 0;
long long l;
int h[N] , up[21][N] , st[N] , en[N] , BIT[N];
long long sum[21][N];
vector<int> a[N];
void inp(){
cin >> n >> l;
h[1] = 1;
for (int i = 2 ; i <= n ; ++i){
int u;
long long w;
cin >> u >> w;
h[i] = h[u] + 1;
up[0][i] = u;
sum[0][i] = w;
a[i].push_back(u);
a[u].push_back(i);
}
for (int j = 1 ; j <= 18 ; ++j){
for (int i = 1 ; i <= n ; ++i){
up[j][i] = up[j - 1][up[j - 1][i]];
sum[j][i] = sum[j - 1][i] + sum[j - 1][up[j - 1][i]];
}
}
}
void dfs(int u , int p){
st[u] = ++cnt;
for (int v : a[u]) if (v != p)
dfs(v , u);
en[u] = cnt;
}
int far(int u){
long long res = 0;
for (int i = 18 ; i >= 0 ; --i){
if (!h[up[i][u]]) continue;
if (res + sum[i][u] > l) continue;
res += sum[i][u];
u = up[i][u];
}
return u;
}
void update(int x , int val){
if (x == 0) return;
while (x <= n){
BIT[x] += val;
x += x & -x;
}
}
int get(int x){
int res = 0;
while (x > 0){
res += BIT[x];
x -= x & -x;
}
return res;
}
void solve(){
dfs(1 , 0);
for (int i = 1 ; i <= n ; ++i){
int p = far(i);
update(st[i] , 1);
update(st[up[0][p]] , -1);
}
for (int i = 1 ; i <= n ; ++i){
cout << get(en[i]) - get(st[i] - 1) << '\n';
}
}
int main(){
// freopen("xhmax.inp" , "r" , stdin);
// freopen("xhmax.out" , "w" , stdout);
faster;
inp();
solve();
return 0;
}
// cnlk
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdGVyIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpCiNkZWZpbmUgQml0KG1hc2sgLCBpKSAoKG1hc2sgPj4gaSkgJiAxKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgX0xPRzIobmwpIDMxIC0gX19idWlsdGluX2NseihubCkKI2RlZmluZSBjX2JpdChubCkgX19idWlsdGluX3BvcGNvdW50KG5sKQojZGVmaW5lIGRiIGxvbmcgZG91YmxlCiNkZWZpbmUgb25CaXQobWFzayAsIGkpIChtYXNrIHwgKDEgPDwgaSkpCiNkZWZpbmUgb2ZmQml0KG1hc2sgLCBpKSAobWFzayAmICh+KDEgPDwgaSkpKQoKY29uc3QgaW50IElORiA9IDFlNzsKY29uc3QgaW50IE4gPSAyZTUgKyA3OwppbnQgbiAsIGsgLCBjbnQgPSAwOwpsb25nIGxvbmcgbDsKaW50IGhbTl0gLCB1cFsyMV1bTl0gLCBzdFtOXSAsIGVuW05dICwgQklUW05dOwpsb25nIGxvbmcgc3VtWzIxXVtOXTsKdmVjdG9yPGludD4gYVtOXTsKCnZvaWQgaW5wKCl7CgljaW4gPj4gbiA+PiBsOwoJaFsxXSA9IDE7Cglmb3IgKGludCBpID0gMiA7IGkgPD0gbiA7ICsraSl7CgkJaW50IHU7CgkJbG9uZyBsb25nIHc7CgkJY2luID4+IHUgPj4gdzsKCQloW2ldID0gaFt1XSArIDE7CgkJdXBbMF1baV0gPSB1OwoJCXN1bVswXVtpXSA9IHc7CgkJYVtpXS5wdXNoX2JhY2sodSk7CgkJYVt1XS5wdXNoX2JhY2soaSk7Cgl9Cglmb3IgKGludCBqID0gMSA7IGogPD0gMTggOyArK2opewoJCWZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgKytpKXsKCQkJdXBbal1baV0gPSB1cFtqIC0gMV1bdXBbaiAtIDFdW2ldXTsKCQkJc3VtW2pdW2ldID0gc3VtW2ogLSAxXVtpXSArIHN1bVtqIC0gMV1bdXBbaiAtIDFdW2ldXTsKCQl9Cgl9Cn0KCnZvaWQgZGZzKGludCB1ICwgaW50IHApewoJc3RbdV0gPSArK2NudDsKCWZvciAoaW50IHYgOiBhW3VdKSBpZiAodiAhPSBwKQoJCWRmcyh2ICwgdSk7Cgllblt1XSA9IGNudDsKfQoKaW50IGZhcihpbnQgdSl7Cglsb25nIGxvbmcgcmVzID0gMDsKCWZvciAoaW50IGkgPSAxOCA7IGkgPj0gMCA7IC0taSl7CgkJaWYgKCFoW3VwW2ldW3VdXSkgY29udGludWU7CgkJaWYgKHJlcyArIHN1bVtpXVt1XSA+IGwpIGNvbnRpbnVlOwoJCXJlcyArPSBzdW1baV1bdV07CgkJdSA9IHVwW2ldW3VdOwoJfQoJcmV0dXJuIHU7Cn0KCnZvaWQgdXBkYXRlKGludCB4ICwgaW50IHZhbCl7CglpZiAoeCA9PSAwKSByZXR1cm47Cgl3aGlsZSAoeCA8PSBuKXsKCQlCSVRbeF0gKz0gdmFsOwoJCXggKz0geCAmIC14OwoJfQp9CgppbnQgZ2V0KGludCB4KXsKCWludCByZXMgPSAwOwoJd2hpbGUgKHggPiAwKXsKCQlyZXMgKz0gQklUW3hdOwoJCXggLT0geCAmIC14OwoJfQoJcmV0dXJuIHJlczsKfQoKdm9pZCBzb2x2ZSgpewoJZGZzKDEgLCAwKTsKCWZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgKytpKXsKCQlpbnQgcCA9IGZhcihpKTsKCQl1cGRhdGUoc3RbaV0gLCAxKTsKCQl1cGRhdGUoc3RbdXBbMF1bcF1dICwgLTEpOwoJfQoJZm9yIChpbnQgaSA9IDEgOyBpIDw9IG4gOyArK2kpewoJCWNvdXQgPDwgZ2V0KGVuW2ldKSAtIGdldChzdFtpXSAtIDEpIDw8ICdcbic7Cgl9Cn0KCmludCBtYWluKCl7Ci8vIAlmcmVvcGVuKCJ4aG1heC5pbnAiICwgInIiICwgc3RkaW4pOwovLyAJZnJlb3BlbigieGhtYXgub3V0IiAsICJ3IiAsIHN0ZG91dCk7CiAgICBmYXN0ZXI7CiAgIAlpbnAoKTsKIAlzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0KLy8gY25saw==