#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define bit(n, i) ((n >> i) & 1)
#define all(a) a.begin(), a.end()
#define rep(i, x, n) for (int i = x; i <= n; ++i)
#define red(i, x, n) for (int i = x; i >= n; --i)
#define inp(a) if (fopen(a".inp", "r")) freopen(a".inp", "r", stdin), freopen(a".out", "w", stdout)
template<class A, class B> inline bool maxi(A &x, B y) {return (x < y ? x = y, 1 : 0);};
template<class A, class B> inline bool mini(A &x, B y) {return (x > y ? x = y, 1 : 0);};
const int N = 1e5 + 5;
const ll MOD = 1e9 + 7;
const ll INF = LLONG_MAX;
// main program
struct node {int v, w;};
int n, k;
vector<node> a[N];
int sz[N], process[N];
int countChild(int u, int p){
sz[u] = 1;
for (auto [v, w]: a[u]){
if (v != p || process[v]) continue;
sz[u] += countChild(v, u);
}
return sz[u];
}
int centroid(int u, int p, int n){
for (auto [v, w]: a[u]){
if (v == p || process[v]) continue;
if (sz[v] > n / 2) return centroid(v, u, n);
}
return u;
}
ll ans = 0;
vector<int> depth;
int get(int x){
return upper_bound(all(depth), x) - depth.begin();
}
void dfs(int u, int p, int d, bool add){
if (d > k) return;
if (add) depth.pb(d);
else ans += get(k - d);
for (auto [v, w]: a[u]){
if (v == p || process[v]) continue;
dfs(v, u, d + w, add);
}
}
void updateANS(int u){
depth = {0};
for (auto [v, w]: a[u]){
if (process[v]) continue;
dfs(v, u, w, 0);
dfs(v, u, w, 1);
sort(all(depth));
}
}
void decompose(int u){
int n = countChild(u, 0);
u = centroid(u, 0, n);
updateANS(u); process[u] = 1;
for (auto [v, w]: a[u]) if (process[v] == 0){
decompose(v);
}
}
signed main(){
cin.tie(0) -> sync_with_stdio(0);
cin >>n >>k;
rep(i, 2, n){
int u, v, w; cin >>u >>v >>w;
a[u].pb({v, w}); a[v].pb({u, w});
}
decompose(1);
cout <<ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGJpdChuLCBpKSAoKG4gPj4gaSkgJiAxKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSByZXAoaSwgeCwgbikgZm9yIChpbnQgaSA9IHg7IGkgPD0gbjsgKytpKQojZGVmaW5lIHJlZChpLCB4LCBuKSBmb3IgKGludCBpID0geDsgaSA+PSBuOyAtLWkpCiNkZWZpbmUgaW5wKGEpIGlmIChmb3BlbihhIi5pbnAiLCAiciIpKSBmcmVvcGVuKGEiLmlucCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKGEiLm91dCIsICJ3Iiwgc3Rkb3V0KQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4gaW5saW5lIGJvb2wgbWF4aShBICZ4LCBCIHkpIHtyZXR1cm4gKHggPCB5ID8geCA9IHksIDEgOiAwKTt9Owp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCPiBpbmxpbmUgYm9vbCBtaW5pKEEgJngsIEIgeSkge3JldHVybiAoeCA+IHkgPyB4ID0geSwgMSA6IDApO307Cgpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CmNvbnN0IGxsIElORiA9IExMT05HX01BWDsKCi8vIG1haW4gcHJvZ3JhbQoKc3RydWN0IG5vZGUge2ludCB2LCB3O307CgppbnQgbiwgazsKdmVjdG9yPG5vZGU+IGFbTl07CgppbnQgc3pbTl0sIHByb2Nlc3NbTl07CgppbnQgY291bnRDaGlsZChpbnQgdSwgaW50IHApewogICAgc3pbdV0gPSAxOwogICAgCiAgICBmb3IgKGF1dG8gW3YsIHddOiBhW3VdKXsKICAgICAgICBpZiAodiAhPSBwIHx8IHByb2Nlc3Nbdl0pIGNvbnRpbnVlOwoKICAgICAgICBzelt1XSArPSBjb3VudENoaWxkKHYsIHUpOwogICAgfQoKICAgIHJldHVybiBzelt1XTsKfQoKaW50IGNlbnRyb2lkKGludCB1LCBpbnQgcCwgaW50IG4pewogICAgZm9yIChhdXRvIFt2LCB3XTogYVt1XSl7CiAgICAgICAgaWYgKHYgPT0gcCB8fCBwcm9jZXNzW3ZdKSBjb250aW51ZTsKCiAgICAgICAgaWYgKHN6W3ZdID4gbiAvIDIpIHJldHVybiBjZW50cm9pZCh2LCB1LCBuKTsKICAgIH0KCiAgICByZXR1cm4gdTsKfQoKbGwgYW5zID0gMDsKdmVjdG9yPGludD4gZGVwdGg7CgppbnQgZ2V0KGludCB4KXsKICAgIHJldHVybiB1cHBlcl9ib3VuZChhbGwoZGVwdGgpLCB4KSAtIGRlcHRoLmJlZ2luKCk7Cn0KCnZvaWQgZGZzKGludCB1LCBpbnQgcCwgaW50IGQsIGJvb2wgYWRkKXsKICAgIGlmIChkID4gaykgcmV0dXJuOwogICAgCiAgICBpZiAoYWRkKSBkZXB0aC5wYihkKTsKICAgIGVsc2UgYW5zICs9IGdldChrIC0gZCk7CgogICAgZm9yIChhdXRvIFt2LCB3XTogYVt1XSl7CiAgICAgICAgaWYgKHYgPT0gcCB8fCBwcm9jZXNzW3ZdKSBjb250aW51ZTsKCiAgICAgICAgZGZzKHYsIHUsIGQgKyB3LCBhZGQpOwogICAgfQp9Cgp2b2lkIHVwZGF0ZUFOUyhpbnQgdSl7CiAgICBkZXB0aCA9IHswfTsKICAgIAogICAgZm9yIChhdXRvIFt2LCB3XTogYVt1XSl7CiAgICAgICAgaWYgKHByb2Nlc3Nbdl0pIGNvbnRpbnVlOwoKICAgICAgICBkZnModiwgdSwgdywgMCk7CiAgICAgICAgZGZzKHYsIHUsIHcsIDEpOwogICAgICAgIHNvcnQoYWxsKGRlcHRoKSk7CiAgICB9Cn0KCnZvaWQgZGVjb21wb3NlKGludCB1KXsKICAgIGludCBuID0gY291bnRDaGlsZCh1LCAwKTsKICAgIHUgPSBjZW50cm9pZCh1LCAwLCBuKTsKCiAgICB1cGRhdGVBTlModSk7IHByb2Nlc3NbdV0gPSAxOwoKICAgIGZvciAoYXV0byBbdiwgd106IGFbdV0pIGlmIChwcm9jZXNzW3ZdID09IDApewogICAgICAgIGRlY29tcG9zZSh2KTsKICAgIH0KfQpzaWduZWQgbWFpbigpewogICAgY2luLnRpZSgwKSAtPiBzeW5jX3dpdGhfc3RkaW8oMCk7CgogICAgY2luID4+biA+Pms7CgogICAgcmVwKGksIDIsIG4pewogICAgICAgIGludCB1LCB2LCB3OyBjaW4gPj51ID4+diA+Pnc7CgogICAgICAgIGFbdV0ucGIoe3YsIHd9KTsgYVt2XS5wYih7dSwgd30pOwogICAgfQoKICAgIGRlY29tcG9zZSgxKTsKCiAgICBjb3V0IDw8YW5zOwoKICAgIHJldHVybiAwOwp9