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

#include<iostream.h>
 long **A,n,*D;
 int k;
 const long maxint=2000000000;
 void dijkstra();
 int main()
 {
  int a=1,b,c,i,br=0;
  cin>>n>>k;
  A=new long *[n];
  D=new long [n];
  for(i=0;i<n;i++)A[i]=new long [n];
  for(i=0;i<n;i++)
   for(br=0;br<n;br++)A[i][br]=0;
  while(1)
   {
    cin>>a>>b>>c;
    if((a==0 && b==0 && c==0))break;
    A[a-1][b-1]=A[b-1][a-1]=c;               
   }
  dijkstra();
  br=0;
  for(i=0;i<n;i++)
   if(D[i]>k && D[i]<maxint)br++;    
  cout<<br<<endl;
  return 0;    
 }

 void dijkstra()
 {
  char *T;
  int i,j;
  long min=maxint;
  T=new char [n];
  for(i=0;i<n;i++)
   {
    if(A[i][0])D[i]=A[i][0];
    else D[i]=maxint; 
    T[i]=0;
   }
  D[0]=0; T[0]=1;   
  while(1)
  {
   min=maxint;
   j=-1;
   for(i=0;i<n;i++)       
    if(!T[i] && D[i]<min){min=D[i]; j=i;}
   if(j==-1)break;
   if(D[j]>k)break;
   T[j]=1;
   for(i=0;i<n;i++)
    if(!T[i] && A[i][j] && D[i]>D[j]+A[i][j])D[i]=D[j]+A[i][j];
   }  
 }
