#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int M = 1e5 + 10, N = 1e4 + 10;
int n, m, k;
int s, t;
int dist[N], g[N][N];
int backup[N];
bool st[M];
void dfs(int u){
st[u] = true;
for(int i = 1;i <= n;i++){
dist[i] = min(dist[i], backup[u] + g[u][i]);
if(!st[i]) dfs(i);
}
return ;
}
int bellman_ford(){
memset(dist, 0x3f, sizeof dist);
dist[s] = 0;
for(int i = 0; i < k; i ++){
memcpy(backup, dist, sizeof dist);
memset(st, false, sizeof st);
dfs(1);
}
return dist[t];
}
int main(){
cin >> n >> m >> k;
cin >> s >> t;
int x, y, z;
for(int i = 0;i < m;i++){
scanf("%d %d %d", &x, &y, &z);
g[x][y] = min(g[x][y], z);
g[y][x] = min(g[y][x], z);
}
int t = bellman_ford();
cout << abs(t) << endl;
return 0;
}