N,M,K = map(int,input().split()) board = [] for _ in range(M): u,v,c = map(int,input().split()) u-=1 v-=1 board.append((u,v,c)) from heapq import heappush,heappop #edge[a].append((b,cost)) def dijekstra(st,dis,edge): q = [] dis[st] = 0 q.append((0,st)) while q: t,now = heappop(q) if t > dis[now]: continue for next,cost in edge[now]: if dis[next] > cost + dis[now]: dis[next] = cost + dis[now] heappush(q,(dis[next],next)) def is_ok(x): edge = [[] for _ in range(N)] for i in range(M): u,v,c = board[i] if c > x: edge[u].append((v,1)) edge[v].append((u,1)) else: edge[u].append((v,0)) edge[v].append((u,0)) INF = float('inf') dis = [INF for _ in range(N)] dijekstra(0,dis,edge) if dis[N-1] <= K -1: return True else: return False ok = 10 ** 5 ng = -1 while ok - ng > 1: x = (ng+ok)//2 if is_ok(x): ok = x else: ng = x print(ok)