#include<bits/stdc++.h>
#define ll long long
#define N 1005
#define M 10005
#define inf INT_MAX
#define reg register
using namespace std;
ll n,m,k,u,v,w,ans=-1,l,r,mid,Max;
ll dis[N],vis[N];
vector<pair<ll,ll> > edge[N];
deque<ll> q;
inline ll read(){
ll f=1,s=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=(s<<3)+(s<<1)+ch-48;
ch=getchar();
}
return f*s;
}
bool check(ll x){
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
dis[1]=0,q.push_back(1);
while(!q.empty()){
u=q.front();
q.pop_front();
if(vis[u]==1)
continue;
vis[u]=1;
for(auto i : edge[u]){
v=i.first,w=i.second;
if(dis[v]>dis[u]){
if(w<=x){
dis[v]=dis[u];
q.push_front(v);
}else{
dis[v]=dis[u]+1;
q.push_back(v);
}
}
}
}
if(dis[n]<=k)
return 1;
else
return 0;
}
int main(){
n=read(),m=read(),k=read();
for(reg ll i=1;i<=m;i++){
u=read(),v=read(),w=read();
edge[u].push_back(make_pair(v,w));
edge[v].push_back(make_pair(u,w));
Max=max(Max,w);
}
l=1,r=Max;
while(l<r){
mid=(l+r)/2;
if(check(mid))
r=mid;
else
l=mid+1;
}
if(l!=1)
printf("%lld",l);
else
puts("-1");
return 0;
}