#include using namespace std; typedef long long ll; typedef long double ld; typedef pair P; typedef pair Pi; #define rep(i,n) for(ll i=0;i inline bool chmax(T &a, T b){if(a inline bool chmin(T &a, T b){if(a>b){a=b;return true;}return false;} template ostream& operator<<(ostream& s,const complex& d) {return s<<"("< ostream& operator<<(ostream& s,const pair& d) {return s<<"("< ostream& operator<<(ostream& s, const vector& d){int len=d.size();rep(i,len){s< ostream& operator<<(ostream& s,const vector>& d){int len=d.size();rep(i,len){s< ostream& operator<<(ostream& s,const set& v){s<<"{ ";for(auto itr=v.begin();itr!=v.end();++itr) {if (itr!=v.begin()) {s<< ", ";}s<<(*itr);}s<<" }";return s;} template ostream& operator<<(ostream& s,const map& m){s<<"{"<>n>>V>>l; vector x(n+2,0),v(n+2,0),w(n+2,0); FOR(i,1,n+1){ cin>>x[i]>>v[i]>>w[i]; } x[n+1]=l; vector> dp(n+2,vector(V+1,inf)); dp[0][V]=0; rep(i,n+1)rep(j,V+1){ if(dp[i][j]==inf) continue; ll ne=x[i+1]-x[i]; if(j>=ne){ chmin(dp[i+1][j-ne],dp[i][j]); } ll nj=min(V,j+v[i]); if(nj>=ne){ chmin(dp[i+1][nj-ne],dp[i][j]+w[i]); } } ll ans=inf; rep(j,V+1){ chmin(ans,dp[n+1][j]); } if(ans==inf) cout<<-1<