#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>

using namespace std;

struct yo
{
    int y;
    int cost;
};

int n,m,k;

vector < yo > v[100010];

vector < int > Ans;

queue < yo > q;

void Read ()
{
    int i,j,p,q,w;
    yo T;
    scanf ("%d%d%d",&n,&m,&k);
    for (i=0;i<m;i++)
    {
        scanf ("%d%d%d",&p,&q,&w);
        T.cost=w;
        T.y=q;
        v[p].push_back (T);
    }
}

void Bfs ()
{
    yo T,R;
    int i,j,sz;
    T.y=1;
    T.cost=0;
    q.push (T);
    while (!q.empty ())
    {
        R=q.front ();
        q.pop ();
        if (R.y==n)Ans.push_back (R.cost);
        sz=v[R.y].size ();
        for (i=0;i<sz;i++)
        {
            T.y=v[R.y][i].y;
            T.cost=R.cost;
            if (T.cost<v[R.y][i].cost)T.cost=v[R.y][i].cost;
            q.push (T);
        }
    }
}

int main ()
{
    Read ();
    Bfs ();
    sort (Ans.begin (),Ans.end ());
    printf ("%d\n",Ans[k-1]);
    return 0;
}
