#include #include #include #include #include #include #include using namespace std; struct P { bool operator<(const P& p) const { return a < p.a; } int a, b, c; int64_t d; }; struct Q { bool operator<(const Q& q) const { return c < q.c; } int c, i; int64_t d; }; int main() { int n, m, k, s, t; cin >> n >> m >> k >> s >> t; vector

p(m + 2); p[0] = { 0, 0, s, 0 }; p[m + 1] = { n, t, 0, 0 }; for (int i = 1; i <= m; i++) { cin >> p[i].a >> p[i].b >> p[i].c; } sort(p.begin(), p.end()); vector l(n + 2); for (int i = m + 1; i >= 0; i--) { l[p[i].a] = i; } l[n + 1] = m + 2; for (int i = 1; i < n; i++) { if (l[i] == 0) { cout << -1 << endl; quick_exit(0); } } vector q(m + 2); for (int a = 0; a < n; a++) { int h = 0; for (int i = l[a]; i < l[a + 1]; i++) { q[h++] = { p[i].c, -1, p[i].d }; } for (int i = l[a + 1]; i < l[a + 2]; i++) { q[h++] = { p[i].b, i, -1 }; } sort(q.begin(), q.begin() + (l[a + 2] - l[a])); int64_t d = (int64_t)1 << 60; for (int i = 0; i < h; i++) { if (i != 0) d += q[i].c - q[i - 1].c; if (q[i].i < 0) { d = min(d, q[i].d); } else { if (q[i].d < 0 || q[i].d > d) q[i].d = d; } } d = (int64_t)1 << 60; for (int i = h - 1; i >= 0; i--) { if (i != h - 1) d += q[i + 1].c - q[i].c; if (q[i].i < 0) { d = min(d, q[i].d); } else { if (q[i].d < 0 || q[i].d > d) q[i].d = d; } } for (int i = 0; i < h; i++) { if (q[i].i >= 0) { p[q[i].i].d = q[i].d; } } } cout << p[m + 1].d << endl; return 0; }