#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct Edge{
int a, b, c;
}edges[10010];
int n,m,k,dist[510],last[510];
void bellman_ford()
{
int i,j;
memset(dist,0x3f,sizeof(dist));
dist[1]=0;
for(i=0;i<k;i++){
memcpy(last,dist,sizeof(dist));
for(j=0;j<m;j++){
auto e=edges[j];
dist[e.b]=min(dist[e.b],last[e.a]+e.c);
}
}
}
int main()
{
int i,a,b,c;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
edges[i]={a,b,c};
}
bellman_ford();
if(dist[n]>0x3f3f3f3f/2)printf("impossible\n");
else printf("%d\n",dist[n]);
return 0;
}