#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;
const int M = 1e5 + 5;
// Đỉnh (ga tàu)
// Cạnh (tuyến đường)
struct Edge {
int u, v, t;
};
int n, m, s, t, delta;
vector<int> adj[N]; // adj[u] = Danh sách những cạnh i kề với đỉnh u
vector<ii> g[M]; // g[i] = Danh sách những cạnh j kề với cạnh i cùng chi phí thời gian để chuyển tuyến từ i sang j
Edge edges[M];
struct Node {
int i; ll d;
bool operator<(const Node& other) const {
return d > other.d;
}
};
ll dist[M]; // dist[i] = Đường đi ngắn nhất từ s đến cạnh thứ i
void dijkstra(int s) {
for (int i = 1; i <= m; i++) dist[i] = LINF;
priority_queue<Node> pq;
for (int i : adj[s]) {
dist[i] = edges[i].t;
pq.push({i, dist[i]});
}
while (!pq.empty()) {
Node front = pq.top(); pq.pop();
int i = front.i; ll d = front.d;
if (d > dist[i]) continue;
for (ii j : g[i]) {
if (minimize(dist[j.first], dist[i] + j.second + edges[j.first].t)) {
pq.push({j.first, dist[j.first]});
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> s >> t >> delta;
for (int i = 1; i <= m; i++) {
int u, v, t;
cin >> u >> v >> t;
adj[u].push_back(i);
edges[i] = {u, v, t};
}
for (int i = 1; i <= m; i++) {
int v = edges[i].v;
for (int j : adj[v]) {
int f = i * delta + j;
g[i].push_back({j, f});
}
}
dijkstra(s);
ll ans = LINF;
for (int i = 1; i <= m; i++) {
int v = edges[i].v;
if (v == t) minimize(ans, dist[i]);
}
if (ans == LINF) ans = -1;
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIHthID0gYjsgcmV0dXJuIHRydWU7fQoJcmV0dXJuIGZhbHNlOyAgCn0KCmNvbnN0IGludCBOID0gMWU1ICsgNTsgCmNvbnN0IGludCBNID0gMWU1ICsgNTsgCgovLyDEkOG7iW5oIChnYSB0w6B1KQovLyBD4bqhbmggKHR1eeG6v24gxJHGsOG7nW5nKQpzdHJ1Y3QgRWRnZSB7CglpbnQgdSwgdiwgdDsgIAp9OwoKaW50IG4sIG0sIHMsIHQsIGRlbHRhOyAgCnZlY3RvcjxpbnQ+IGFkaltOXTsgLy8gYWRqW3VdID0gRGFuaCBzw6FjaCBuaOG7r25nIGPhuqFuaCBpIGvhu4EgduG7m2kgxJHhu4luaCB1IAp2ZWN0b3I8aWk+IGdbTV07IC8vIGdbaV0gPSBEYW5oIHPDoWNoIG5o4buvbmcgY+G6oW5oIGoga+G7gSB24bubaSBj4bqhbmggaSBjw7luZyBjaGkgcGjDrSB0aOG7nWkgZ2lhbiDEkeG7gyBjaHV54buDbiB0dXnhur9uIHThu6sgaSBzYW5nIGoKRWRnZSBlZGdlc1tNXTsgCgpzdHJ1Y3QgTm9kZSB7CglpbnQgaTsgbGwgZDsgCglib29sIG9wZXJhdG9yPChjb25zdCBOb2RlJiBvdGhlcikgY29uc3QgewoJCXJldHVybiBkID4gb3RoZXIuZDsgCgl9Cn07IAoKbGwgZGlzdFtNXTsgLy8gZGlzdFtpXSA9IMSQxrDhu51uZyDEkWkgbmfhuq9uIG5o4bqldCB04burIHMgxJHhur9uIGPhuqFuaCB0aOG7qSBpIAoKdm9pZCBkaWprc3RyYShpbnQgcykgewoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSBkaXN0W2ldID0gTElORjsgICAKCQoJcHJpb3JpdHlfcXVldWU8Tm9kZT4gcHE7IAoJZm9yIChpbnQgaSA6IGFkaltzXSkgewoJCWRpc3RbaV0gPSBlZGdlc1tpXS50OwoJCXBxLnB1c2goe2ksIGRpc3RbaV19KTsgIAoJfQoKCXdoaWxlICghcHEuZW1wdHkoKSkgewoJCU5vZGUgZnJvbnQgPSBwcS50b3AoKTsgcHEucG9wKCk7IAoJCWludCBpID0gZnJvbnQuaTsgbGwgZCA9IGZyb250LmQ7ICAKCgkJaWYgKGQgPiBkaXN0W2ldKSBjb250aW51ZTsgIAoKCQlmb3IgKGlpIGogOiBnW2ldKSB7CgkJCWlmIChtaW5pbWl6ZShkaXN0W2ouZmlyc3RdLCBkaXN0W2ldICsgai5zZWNvbmQgKyBlZGdlc1tqLmZpcnN0XS50KSkgewoJCQkJcHEucHVzaCh7ai5maXJzdCwgZGlzdFtqLmZpcnN0XX0pOyAKCQkJfQoJCX0KCX0KfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gbSA+PiBzID4+IHQgPj4gZGVsdGE7IAoKCWZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewoJCWludCB1LCB2LCB0OyAKCQljaW4gPj4gdSA+PiB2ID4+IHQ7IAoJCWFkalt1XS5wdXNoX2JhY2soaSk7IAoJCWVkZ2VzW2ldID0ge3UsIHYsIHR9OyAKCX0KCglmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKCQlpbnQgdiA9IGVkZ2VzW2ldLnY7IAoJCWZvciAoaW50IGogOiBhZGpbdl0pIHsKCQkJaW50IGYgPSBpICogZGVsdGEgKyBqOyAgIAoJCQlnW2ldLnB1c2hfYmFjayh7aiwgZn0pOyAgCgkJfQoJfQoKCWRpamtzdHJhKHMpOyAgCgoJbGwgYW5zID0gTElORjsgIAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CgkJaW50IHYgPSBlZGdlc1tpXS52OyAKCQlpZiAodiA9PSB0KSBtaW5pbWl6ZShhbnMsIGRpc3RbaV0pOyAKCX0KCWlmIChhbnMgPT0gTElORikgYW5zID0gLTE7ICAKCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==