#include <bits/stdc++.h> using namespace std; const int N = 510, M = 1e4 + 10; int n, m, k; int dist[N], back[N]; struct Edge { int a, b, c; } edge[M];
int bellman_ford() { dist[1] = 0; for (int i = 1; i <= k; i++) { //此处k 经过不超过k条边的最短路距离 memcpy(back, dist, sizeof dist); for (int j = 1; j <= m; j++) { int a = edge[j].a, b = edge[j].b, w = edge[j].c; dist[b] = min(dist[b], back[a] + w); } } if (dist[n] >= 0x3f3f3f3f / 2) return -0x3f3f3f3f; return dist[n]; }
int main() { scanf("%d%d%d", &n, &m, &k); for (int i = 1; i <= m; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); edge[i] = {u, v, w}; } memset(dist, 0x3f3f3f3f, sizeof dist); int ans = bellman_ford(); if (ans == -0x3f3f3f3f) puts("impossible"); else printf("%d", ans); return 0; }