#include <bits/stdc++.h>
namespace SXL {
using std::deque;
using std::min;
constexpr int MAXN = 1005;
int edge[MAXN][MAXN];
int dis[MAXN],vis[MAXN];
int n,p,k;
int check(int x) {
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
deque<int> q;
q.push_back(1);
dis[1] = 0;
vis[1] = 1;
int tmp;
while(!q.empty()) {
tmp = q.front();
q.pop_front();
for(int i = 1;i <= n;i++) {
if(edge[tmp][i] < 0 || (vis[i] && dis[i] < dis[tmp] + 1)) continue;
dis[i] = dis[tmp] + (edge[tmp][i] > x ? 1 : 0);
vis[i] = 1;
if(edge[tmp][i] > x) q.push_back(i);
else q.push_front(i);
}
}
return dis[n] <= k;
}
void main() {
memset(edge,0xc0,sizeof(edge));
scanf("%d%d%d",&n,&p,&k);
for(int i = 1,a,b,l;i <= n;i++) {
scanf("%d%d%d",&a,&b,&l);
edge[a][b] = l;
edge[b][a] = l;
}
int l = 1,r = 1000000,mid;
while(l < r) {
mid = (l + r) / 2;
if(check(mid)) {
r = mid;
} else {
l = mid + 1;
}
}
printf("%d\n",l != 1 ? l : -1);
}
}
int main() {
SXL::main();
return 0;
}