#include<iostream>
#include<vector>
#include<stdio.h>
using namespace std;
struct ver { int vr;
             int t; };
struct pat { int sb;
             int time; };
vector <ver> a[100001];
pat b[100001];
int n,k,br;
int dfs (int vr, int maxst, int p) { 
    int i,len,sb=0;
    len=a[vr].size();
    if (vr==n-1) {
       br++;
       return 1;
       }
    for (i=0; i<len; i++) {
        if ((a[vr][i].t<=maxst)&&(b[a[vr][i].vr].time<p)) sb+=dfs(a[vr][i].vr,maxst,p);
        else if (a[vr][i].t<=maxst) sb+=b[a[vr][i].vr].sb;
        if (br>=k) return 0;
        }
    b[vr].sb=sb;
    b[vr].time=p;
    br+=sb;
    return sb;
}
int main () {
    int m,i,x,y,t,max=-1,l,r,mid,ans,br1=1;
    ver p;
    cin >> n >> m >> k ;
    for (i=0; i<m; i++) {
        scanf("%d%d%d",&x,&y,&t);
        b[i].time=0;
        if (max<t) max=t;
        p.vr=y-1;
        p.t=t;
        a[x-1].push_back(p);
        }
    for (i=m; i<n; i++) {
        b[i].time=0;
        }
    ans=max;
    l=0; r=max;
    for (;;) {
        if ((l==r-1)||(l==r)) break;
        mid=(l+r)/2;
        br=0;
        dfs(0,mid,br1++);
        if (br>=k) {
           r=mid;
           ans=mid;
           }
        else l=mid;
        }
    cout << ans ;
    cout << endl ;
    //system ("PAUSE");
    return 0;
}
