#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
bool minimize(T& a, const T& b) {
if (b < a) {a = b; return true;}
return false;
}
const int N = 1e5 + 5;
struct Node {
int u, i; ll d;
bool operator<(const Node& other) const {
return d > other.d;
}
};
int n, m, k, s, t;
vector<ii> adj[N];
ll dist[N][6]; // dist[u][i] = Đường đi ngắn nhất từ s đến u và đã sử dụng i vé xe miễn phí
ll dijkstra(int s, int t) {
for (int u = 1; u <= n; u++) {
for (int i = 0; i <= k; i++) dist[u][i] = LINF;
}
priority_queue<Node> pq;
dist[s][0] = 0;
pq.push({s, 0, dist[s][0]});
while (!pq.empty()) {
Node front = pq.top(); pq.pop();
int u = front.u, i = front.i; ll d = front.d;
if (d > dist[u][i]) continue;
if (u == t) return dist[u][i];
for (ii v : adj[u]) {
// không sử dụng vé xe miễn phí
if (minimize(dist[v.first][i], dist[u][i] + v.second)) {
pq.push({v.first, i, dist[v.first][i]});
}
// sử dụng vé xe miễn phí
if (i + 1 <= k) {
if (minimize(dist[v.first][i + 1], dist[u][i])) {
pq.push({v.first, i + 1, dist[v.first][i + 1]});
}
}
}
}
return LINF;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> k >> s >> t;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
ll ans = dijkstra(s, t);
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIHthID0gYjsgcmV0dXJuIHRydWU7fQoJcmV0dXJuIGZhbHNlOyAKfQoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCnN0cnVjdCBOb2RlIHsKCWludCB1LCBpOyBsbCBkOwoJYm9vbCBvcGVyYXRvcjwoY29uc3QgTm9kZSYgb3RoZXIpIGNvbnN0IHsKCQlyZXR1cm4gZCA+IG90aGVyLmQ7ICAKCX0KfTsgCgppbnQgbiwgbSwgaywgcywgdDsgCnZlY3RvcjxpaT4gYWRqW05dOyAKCmxsIGRpc3RbTl1bNl07IC8vIGRpc3RbdV1baV0gPSDEkMaw4budbmcgxJFpIG5n4bqvbiBuaOG6pXQgdOG7qyBzIMSR4bq/biB1IHbDoCDEkcOjIHPhu60gZOG7pW5nIGkgdsOpIHhlIG1p4buFbiBwaMOtCgkKbGwgZGlqa3N0cmEoaW50IHMsIGludCB0KSB7Cglmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKCQlmb3IgKGludCBpID0gMDsgaSA8PSBrOyBpKyspIGRpc3RbdV1baV0gPSBMSU5GOyAKCX0KCglwcmlvcml0eV9xdWV1ZTxOb2RlPiBwcTsgCglkaXN0W3NdWzBdID0gMDsgICAgCglwcS5wdXNoKHtzLCAwLCBkaXN0W3NdWzBdfSk7IAoKCXdoaWxlICghcHEuZW1wdHkoKSkgewoJCU5vZGUgZnJvbnQgPSBwcS50b3AoKTsgcHEucG9wKCk7ICAKCQlpbnQgdSA9IGZyb250LnUsIGkgPSBmcm9udC5pOyBsbCBkID0gZnJvbnQuZDsgIAoKCQlpZiAoZCA+IGRpc3RbdV1baV0pIGNvbnRpbnVlOyAgCgoJCWlmICh1ID09IHQpIHJldHVybiBkaXN0W3VdW2ldOyAgIAoKCQlmb3IgKGlpIHYgOiBhZGpbdV0pIHsKCQkJLy8ga2jDtG5nIHPhu60gZOG7pW5nIHbDqSB4ZSBtaeG7hW4gcGjDrQoJCQlpZiAobWluaW1pemUoZGlzdFt2LmZpcnN0XVtpXSwgZGlzdFt1XVtpXSArIHYuc2Vjb25kKSkgewoJCQkJcHEucHVzaCh7di5maXJzdCwgaSwgZGlzdFt2LmZpcnN0XVtpXX0pOyAgCgkJCX0KCgkJCS8vIHPhu60gZOG7pW5nIHbDqSB4ZSBtaeG7hW4gcGjDrQoJCQlpZiAoaSArIDEgPD0gaykgewoJCQkJaWYgKG1pbmltaXplKGRpc3Rbdi5maXJzdF1baSArIDFdLCBkaXN0W3VdW2ldKSkgewoJCQkJCXBxLnB1c2goe3YuZmlyc3QsIGkgKyAxLCBkaXN0W3YuZmlyc3RdW2kgKyAxXX0pOyAKCQkJCX0KCQkJfQoJCX0KCX0KCglyZXR1cm4gTElORjsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG0gPj4gayA+PiBzID4+IHQ7IAoKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CgkJaW50IHUsIHYsIHc7IAoJCWNpbiA+PiB1ID4+IHYgPj4gdzsgCgkJYWRqW3VdLnB1c2hfYmFjayh7diwgd30pOyAKCQlhZGpbdl0ucHVzaF9iYWNrKHt1LCB3fSk7IAoJfQoKCWxsIGFucyA9IGRpamtzdHJhKHMsIHQpOyAKCgljb3V0IDw8IGFucyA8PCAnXG4nOyAgIAp9