#include<bits/stdc++.h>
#define maxn 2200005
#define inf 2147483647
using namespace std;
int h[maxn], cnt = 0, to[maxn], w[maxn], nxt[maxn], dis[maxn], vis[maxn], n, m, k, s, t;
priority_queue<pair<int, int> > q;
void addedge(int a, int b, int c) {
cnt++;
w[cnt] = c;
to[cnt] = b;
nxt[cnt] = h[a];
h[a] = cnt;
}
void dijkstra() {
memset(dis, 0x3f, sizeof(dis));
dis[s] = 0;
q.push({0, s});
while (!q.empty()) {
int x = q.top().second;
q.pop();
if (vis[x]) continue;
vis[x] = 1;
for (int i = h[x]; i; i = nxt[i]) {
if (!vis[to[i]] && dis[to[i]] > dis[x] + w[i]) {
dis[to[i]] = dis[x] + w[i];
q.push({-dis[to[i]], to[i]});
}
}
}
}
int main() {
cin >> n >> m >> k;
cin >> s >> t;
while (m--) {
int a, b, c;
cin >> a >> b >> c;
for (int i = 1; i <= k; i++) {
addedge(a + i * n, b + i * n, c);
addedge(b + i * n, a + i * n, c);
addedge(a + (i - 1) * n, b + i * n, 0);
addedge(b + (i - 1) * n, a + i * n, 0);
}
}
dijkstra();
int ans = inf;
for (int i = 0; i <= k; i++) {
ans = min(ans, dis[t + i * n]);
}
cout << ans;
return 0;
}