#include <fstream>
#include <deque>
#include <vector>
using namespace std;
FILE*f;
FILE*g;
long long m,n,i,j,nr1,nr2,nr3,tare,c[50001],g1,i1,i2,i3,i5,cadet[50001],all,grupa[50001],k,alll,numar1,numar2,ultim,ultimul,a[100][100],prim,ult,celbun,pas,asd;
deque <int>deque1[50001],deque2[50001],deque3[50001],deque4[50001],vec[50001],dequenou[50001];
struct nod {int x;int y;int pas;} c1[50001];
void coada(int m)
{if(!deque1[m].empty())
{
while(!deque1[m].empty())
{
if(deque2[m].front()>=g1)
{ int tat=deque1[m].front();
deque1[m].pop_front();
deque2[m].pop_front();
tare++;
c[tare]=tat;
if(m==n)ultim=n;
coada(tat);
}
else
{
deque3[m].push_front(deque1[m].front());
deque1[m].pop_front();
deque4[m].push_front(deque2[m].front());
deque2[m].pop_front(); if(m==n)ultim=n;
}}}}
int main()
{f=fopen("camionas.in","r");
g=fopen("camionas.out","w");
fscanf(f,"%d%d%d",&n,&m,&g1);
for(i=1;i<=m;i++)
{fscanf(f,"%d%d%d",&nr1,&nr2,&nr3);
deque1[nr1].push_front(nr2);
deque1[nr2].push_front(nr1);
deque2[nr1].push_front(nr3);
deque2[nr2].push_front(nr3);}
for(i=1;i<=n;i++)
{if(!deque1[i].empty()){tare=1;
c[tare]=i;all++;
coada(i);
if(ultim==n)
{ultimul=all;ultim=0;}
for(j=1;j<=tare;j++)
{grupa[c[j]]=all;}}}
for(i=1;i<=n;i++)
for(j=1;j<=all;j++)
if(grupa[i]==j)
vec[j].push_front(i);
for(i=1;i<=all;i++)
while(!vec[i].empty())
{numar1=vec[i].front();
numar2=deque3[vec[i].front()].front();
while(!deque3[vec[i].front()].empty())
{dequenou[i].push_front(grupa[deque3[vec[i].front()].front()]);
deque3[vec[i].front()].pop_front();}
vec[i].pop_front();
}
for(i=1;i<=all;i++)
while(!dequenou[i].empty())
{if(i==ultimul||dequenou[i].front()==ultimul)
{
a[i][dequenou[i].front()]=2;
a[dequenou[i].front()][i]=2;
}else
{a[i][dequenou[i].front()]=1;
a[dequenou[i].front()][i]=1;}
dequenou[i].pop_front();
}
c1[1].pas=1;
c1[1].x=1;
c1[1].y=1;
prim=1;
ult=1;
while(prim<=ult)
{
for(i=1;i<=all;i++)
{if(a[i][c1[prim].y]==1)
{
ult++;
c1[ult].x=i;
c1[ult].y=c1[prim].y;
c1[ult].pas=c1[prim].pas+1;
}
else
if(a[i][c1[prim].y]==2)
{asd=1;celbun=ult+1;c1[celbun].pas=c1[prim].pas+1;}}
if(asd==1) break;
for(i=1;i<=all;i++)
{
if(a[c1[prim].x][i]==1)
{
ult++;
c1[ult].x=c1[prim].x;
c1[ult].y=i;
c1[ult].pas=c1[prim].pas+1;
}
else
if(a[c1[prim].x][i]==2)
{
asd=1;celbun=ult+1;c1[celbun].pas=c1[prim].pas+1;
}
}
if(asd==1)break;
}
fprintf(g,"%d",c1[celbun].pas-1);
return 0;
}