#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <numeric>
#include <queue>
#include <string>
#include <vector>
using namespace std;
#define vec vector
#define str string
#define int long long
#define pr_qu priority_queue
#define que queue
#define deq deque
#define inf 1e18
#define pii pair<long long, long long>
signed main()
{
int n, m, k;
cin >> n >> m >> k;
vec<vec<pii>> g(n);
for (int i = 0; i < m; ++i)
{
int u, v, w;
cin >> u >> v >> w;
g[u - 1].push_back({v - 1, w});
}
if (k == 0)
{
cout << 0 << '\n';
return 0;
}
vec<int> dpp(n, 0);
vec<int> dpc(n, inf);
for (int i = 1; i <= k; ++i)
{
dpc = vector<int>(n, inf);
for (int j = 0; j < n; ++j)
{
if (dpp[j] == inf)
continue;
for (auto& [v, w] : g[j])
{
if (dpp[j] + w < dpc[v])
dpc[v] = dpp[j] + w;
}
}
swap(dpp, dpc);
}
int ans = inf;
for (auto& i : dpp)
if (i < ans)
ans = i;
if (ans == inf)
cout << "IMPOSSIBLe\n";
else
cout << ans << '\n';
}




