#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1009, M = 20005;
int n, m, k, head[N], ver[M], nxt[M], edge[M], tot;
int d[N];
deque <int> dq;
void add (int u, int v, int w){
ver[++tot] = v, edge[tot] = w;
nxt[tot] = head[u], head[u] = tot;
}
bool check (int t){
memset(d, 0x3f, sizeof d);
d[1] = 0;
dq.push_back(1);
while (dq.size()){
int x = dq.front();
dq.pop_front();
for (int i = head[x]; i; i = nxt[i]){
int y = ver[i], z = (edge[i] > t ? 1 : 0);
if (d[y] > d[x] + z){
d[y] = d[x] + z;
if (!z) dq.push_front(y);
else dq.push_back(y);
}
}
}
return d[n] <= k;
}
int main(){
cin >> n >> m >> k;
for (int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
add (u, v, w);
add (v, u, w);
}
int l = 0, r = 1e8;
while (l < r){
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
cout << (l == 1e8 ? -1 : l);
return 0;
}