#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std ;
const int N = 510, inf=1e9 ;
vector<array<int,2>> e[N] ;
int dis[N], bak[N], vis[N], idx ;
void add(int a, int b, int c){
e[a].push_back({b, c}) ;
}
void spfa(int su, int eu, int lim){
memset(dis, 0x3f, sizeof(dis)) ;
dis[su] = 0 ;
queue<int> q ;
q.push(su) ;
vis[su]=1 ;
while(lim--){
int l = q.size() ;
memcpy(bak, dis, sizeof(dis)) ;
memset(vis, 0, sizeof(vis)) ;
while(l--){
int u = q.front() ;
q.pop() ;
for(auto &[v, d]:e[u])
if(dis[v]>bak[u]+d){
dis[v]=bak[u]+d ;
if(!vis[v]){
// 限制下一步只能存在一个相同的起始节点
vis[v]=1 ;
q.push(v) ;
}
}
}
}
dis[eu]<inf ?
cout << dis[eu] << endl :
cout << "impossible" << endl;
}
int main(){
int n, m, k, x, y, z;
cin >> n >> m >> k ;
while(m--){
scanf("%d %d %d", &x, &y, &z) ;
add(x, y, z) ;
}
spfa(1, n, k);
}