#include<iostream>#include<algorithm>#include<cstring>
using namespace std;constint N =510, M =1e4+10;int n,m,k;int g[N][N];int dis[N];int backup[N];structEdge{int a,b,w;}edges[M];voidbellman_ford(){memset(dis,0x3f,sizeof(dis));
dis[1]=0;for(int i =0; i < k; i++){//最多经过k条边。memcpy(backup,dis,sizeof(dis));for(int j =0; j < m; j++){//遍历m条边int a = edges[j].a, b = edges[j].b, w = edges[j].w;
dis[b]=min(dis[b], backup[a]+ w);//防止发生连锁反应的更新。//所以,需要备份一下dis.}}if(dis[n]>0x3f3f3f3f/2)puts("impossible");elseprintf("%d\n",dis[n]);}intmain(){scanf("%d%d%d",&n,&m,&k);for(int i =0; i < m; i++){scanf("%d%d%d",&edges[i].a,&edges[i].b,&edges[i].w);}bellman_ford();return0;}