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

#include<stdio.h>
//FILE *f=fopen("capital.in","rt");
int masiv[10010][4][2],index[10010],q[200000],n,k,a,b,c;
int x,route[10010],krai,st,br;
//opashkata nqma shans nikoga da se napylni

int main()
{
scanf("%d%d",&n,&k);

scanf("%d%d%d",&a,&b,&c);
if(c<=k)
        {
        masiv[a][index[a]][0]=b;
        masiv[a][index[a]][1]=c;
        masiv[b][index[b]][0]=a;
        masiv[b][index[b]][1]=c;
        index[a]++;
        index[b]++;
        }
while(!(a==0&&b==0&&c==0))
{
scanf("%d%d%d",&a,&b,&c);
if(c<=k)
        {
        masiv[a][index[a]][0]=b;
        masiv[a][index[a]][1]=c;
        masiv[b][index[b]][0]=a;
        masiv[b][index[b]][1]=c;
        index[a]++;
        index[b]++;
        }
}
for(x=2;x<=n;x++)
route[x]=100;
//pyt ot 1 do x
//obhojdane na vsichki NEotdalecheni gradove
st=0;
q[0]=1;
krai=1;

if(k<10)
{
printf("%d\n",n);
return 0;
}

while(st!=krai)
{

for(x=0;x<index[q[st]];x++)
        {
if(route[masiv[q[st]][x][0]]>route[q[st]]+masiv[q[st]][x][1])
                {
route[masiv[q[st]][x][0]]=route[q[st]]+masiv[q[st]][x][1];
if(route[masiv[q[st]][x][0]]<=k-10)
                {
                q[krai]=masiv[q[st]][x][0];
                //eventualno shte moje da se dobavqt novi elementi ottuk
                krai++;
                }
                
                }


        }
st++;
}

for(x=2;x<=n;x++)
if(route[x]>k)
br++;
printf("%d\n",br);

return 0;
}






