#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1e17;
int n,p,k,a,b,l;
vector< pair<int,int> >ve[1000003];
int dis[1000003];
bool st[1000003];
priority_queue< pair<int,int> >que;
void work(){
for(int i=1;i<=(k+1)*n;i++){
dis[i]=INF;
st[i]=0;
}
que.push(make_pair(0,1));
dis[1]=0;
while(!que.empty()){
int u=que.top().second;
que.pop();
if(st[u])continue;
st[u]=1;
for(int j=0;j<ve[u].size();j++){
int to=ve[u][j].first;
int w=ve[u][j].second;
if(dis[to]>max(dis[u],w)){
dis[to]=max(dis[u],w);
if(st[to]==false){
que.push(make_pair(-dis[to],to));
}
}
}
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>p>>k;
for(int i=1;i<=p;i++){
cin>>a>>b>>l;
ve[a].push_back(make_pair(b,l));
ve[b].push_back(make_pair(a,l));
for(int j=1;j<=k;j++){
ve[a+j*n].push_back(make_pair(b+j*n,l));
ve[b+j*n].push_back(make_pair(a+j+n,l));
ve[a+j*n-n].push_back(make_pair(b+j*n,0));
ve[b+j*n-n].push_back(make_pair(a+j*n,0));
}
}
work();
int ans=INF;
for(int i=0;i<=k;i++){
ans=min(ans,dis[n+i*n]);
}
if(ans==INF)ans=-1;
cout<<ans;
return 0;
}