/*
TASK:capital
LANG:C++
*/

#include<stdio.h>
#include<vector>
#define maxn 10002
#define inf 999999999
using namespace std;
typedef long long ll;
struct asd{int v;ll d;};
vector< vector<asd> >a;
int i,j,n,k,br=0;
bool used[maxn];
ll d[maxn];
void init(){
   FILE *fi=stdin;//fopen("inp.txt","rt");
   fscanf(fi,"%d",&n);
   fscanf(fi,"%d",&k);
   vector<asd> temp;
   for(i=1;i<=n+2;i++)a.push_back(temp);
   long tmp1=-1,tmp2=-1,tmp3=-1;asd t;
   while(tmp1!=0 && tmp1!=0 && tmp1!=0){
      fscanf(fi,"%ld %ld %ld",&tmp1,&tmp2,&tmp3);
      t.v=tmp2;t.d=tmp3;
      a[tmp1].push_back(t);
      t.v=tmp1;
      a[tmp2].push_back(t);
   }
   fclose(fi);
}
void solve(){
   int kk=1;
   for(i=0;i<a[1].size();i++)d[a[1][i].v]=a[1][i].d;
   for(i=1;i<=n;i++)if(d[i]==0)d[i]=inf;
   d[1]=0;
   while(1){
      used[kk]=1;
      for(i=0;i<a[kk].size();i++)
         if(d[kk]+a[kk][i].d<d[a[kk][i].v])
            d[a[kk][i].v]=d[kk]+a[kk][i].d;
      d[0]=inf;
      for(i=1;i<=n;i++)
         if(d[0]>d[i] && !used[i]){kk=i;d[0]=d[i];}
      if(d[0]==inf)break;
   }
   for(i=1;i<=n;i++)
      if(d[i]>k)br++;
   printf("%d\n",br);
}
int main(){
   init();
   solve();
   return 0;
}

