#include #define rep(i,n) for(int i=0;i ; const ll INF = 1e10; const int MOD = 1000000007; struct gas{ int x,v,w; }; int main(){ int N,V,L; cin >> N >> V >> L; vector gass(N); rep(i,N) cin >> gass[i].x >> gass[i].v >> gass[i].w; vector> dp(N+1,vector(V+1,INF)); dp[0][V] = 0; for(int i=1;i<=N;i++){ ll d = (i==1 ? gass[i-1].x : gass[i-1].x - gass[i-2].x); ll mn = INF; rep(j,V+1){ if(d+V-gass[i-1].v <= j && V - gass[i-1].v >= 0) mn = min(mn,dp[i-1][j]); if(j+d <= V) dp[i][j] = dp[i-1][j+d]; if(j-gass[i-1].v >= 0 && j+d-gass[i-1].v <= V) dp[i][j] = min(dp[i][j],dp[i-1][j+d-gass[i-1].v] + gass[i-1].w); if(j==V) dp[i][j] = min(dp[i][j],mn + gass[i-1].w); } } ll d = L - gass[N-1].x; ll ans = INF; for(ll i=d;i<=V;i++){ ans = min(ans,dp[N][i]); } cout << (ans==INF ? -1 : ans) << endl; /* rep(i,N+1){ rep(j,V+1) cout << dp[i][j] << " "; cout << endl; }*/ return 0; }