#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { ll N, VL, L; cin >> N >> VL >> L; vector X(N + 2); vector V(N + 2); vector W(N + 2); X[0] = 0; V[0] = 0; W[0] = 0; for (int i = 1; i <= N; ++i) { cin >> X[i] >> V[i] >> W[i]; } X[N + 1] = L; V[N + 1] = 0; W[N + 1] = 0; vector> dp(N + 2, vector(VL + 1, LLONG_MAX)); dp[0][VL] = 0; for (int i = 0; i <= N; ++i) { int dist = X[i + 1] - X[i]; for (int v = VL; v >= 0; --v) { if (dp[i][v] == LLONG_MAX) continue; int nv = v - dist; if (nv < 0) break; dp[i + 1][nv] = min(dp[i + 1][nv], dp[i][v]); ll cv = min(VL, nv + V[i + 1]); dp[i + 1][cv] = min(dp[i + 1][cv], dp[i + 1][nv] + W[i + 1]); } for (int v = VL - 1; v >= 0; --v) { dp[i + 1][v] = min(dp[i + 1][v], dp[i + 1][v + 1]); } } ll ans = LLONG_MAX; for (int v = 0; v <= VL; ++v) { ans = min(ans, dp[N + 1][v]); } if (ans == LLONG_MAX) { cout << -1 << endl; } else { cout << ans << endl; } return 0; }