#include<iostream>
#include<vector>
#include<set>
using namespace std;
struct ver { int vr;
             long long int t; };
vector <ver> a[100001];
multiset <int> b;
multiset <int>::iterator it;
int n,len=0,k;
int dfs (int vr, int maxst) { 
    int i,len1;
    len1=a[vr].size();
    if (vr==n-1) {
       b.insert(maxst);
       len++;
       if (len>k) {
          it=b.end(); it--;
          b.erase(it);
          len=k;
          }
       return 0;
       }
    for (i=0; i<len1; i++) {
        dfs(a[vr][i].vr,(maxst<a[vr][i].t)?a[vr][i].t:maxst);
        }
}
int main () {
    int m,i,x,y,t;
    ver p;
    cin >> n >> m >> k ;
    for (i=0; i<m; i++) {
        cin >> x >> y >> t ;
        p.vr=y-1;
        p.t=t;
        a[x-1].push_back(p);
        }
    dfs(0,-1);
    it=b.end(); it--;
    cout << *it ;
    cout << endl ;
    //system ("PAUSE");
    return 0;
}
