#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k;
const int N = 1001;
int A[N][N];
int B[N][N];
bool check(int mid){
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
B[i][j]=A[i][j];
}
}
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++) {
if(B[i][j]==inf) continue;
else if (B[i][j]<mid) B[i][j]=0;
else B[i][j]=1;
}
}
bool vis[1001]={0};
int dis[1001]={0};
for (int i=2; i<=n; i++) dis[i]=inf;
for (int i=1; i<=n; i++) {
int cnt=-1;
int _min=inf;
for (int j=1; j<=n; j++) {
if(_min>dis[j]&&!vis[j]){
cnt=j;
_min=dis[j];
}
}
vis[cnt]=1;
for (int j=1; j<=n; j++) {
dis[j]=min(dis[j],dis[cnt]+B[cnt][j]);
}
}
return dis[n]>k;
}
signed main() {
cin>>n>>m>>k;
for (int i=1; i<=1000; i++) {
for (int j=1; j<=1000; j++) {
A[i][j]=inf;
}
}
for (int i=1; i<=m; i++) {
int x,y,z;
cin>>x>>y>>z;
A[x][y]=min(A[x][y],z);
A[y][x]=min(A[y][x],z);
}
int l=0,r=1000005;
while (l<r) {
int mid=(l+r+1)/2;
if(check(mid)){
l=mid;
}
else{
r=mid-1;
}
}
if (l==1000005) {
cout<<"-1"<<endl;
}
else cout<<l<<endl;
return 0;
}