#include <bits/stdc++.h>
using namespace std;
using ll = long long;
long long solve(int N, int M, int W, std::vector<int> T,
std::vector<int> X, std::vector<int> Y,
std::vector<int> A, std::vector<int> B, std::vector<int> C,
std::vector<int> L, std::vector<int> R){
vector<unordered_map<int, long long>> dp(N);
vector<vector<int>> in(N), out(N);
for (int i = 0; i<M; i++) {
in[Y[i]].push_back(i);
out[X[i]].push_back(i);
}
for (int i = 0; i<N; i++){
for (int e: in[i]) dp[i][B[e]] = 1e18;
}
dp[0][0] = 0;
set<pair<int, int>> st = {{0, 0}};
for (int i = 0; i<N; i++){
for (int e: in[i]) st.insert({B[e], e});
}
for (auto [t, cur]: st){
for (int e: out[cur]){
if (A[e]>=t){
dp[Y[e]][B[e]] = min(dp[Y[e]][B[e]], dp[cur][t]+C[e]);
}
}
}
long long res = 1e18;
for (auto e: dp[N-1]) res = min(res, e.second);
if (res==1e18) res = -1;
return res;
}
// int main() {
// cout<<solve(3, 3, 1, {20, 30, 40}, {0, 1, 0}, {1, 2, 2},
// {1, 20, 18}, {15, 30, 40}, {10, 5, 40}, {16}, {19});
// }