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