#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e4 * 11;
int n, m, k, s, t, ans = 2147483647, dis[N + 1];
vector<pair<int, int> > f[N + 1];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
bool vis[N + 1];
void dijkstra() {
for (int i = 1; i <= (k + 1) * n; ++ i) dis[i] = 2147483647;
pq.push(make_pair(0, s));
dis[s] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
if (vis[u]) continue;
vis[u] = true;
for (int i = 0; i < f[u].size(); ++ i) {
int v = f[u][i].first, w = f[u][i].second;
if (dis[u] + w < dis[v]) {
dis[v] = dis[u] + w;
pq.push(make_pair(dis[v], v));
}
}
}
}
signed main() {
cin >> n >> m >> k >> s >> t;
for (int i = 1; i <= m; ++ i) {
int u, v, w;
cin >> u >> v >> w;
f[u].push_back(make_pair(v, w));
f[v].push_back(make_pair(u, w));
for (int j = 1; j <= k; ++ j) {
f[(j - 1) * n + u].push_back(make_pair(j * n + v, 0));
f[(j - 1) * n + v].push_back(make_pair(j * n + u, 0));
f[j * n + u].push_back(make_pair(j * n + v, w));
f[j * n + v].push_back(make_pair(j * n + u, w));
}
}
dijkstra();
for (int i = 0; i <= k; ++ i) ans = min(ans, dis[i * n + t]);
cout << ans;
}