#include #include #include #include #include #include #include #include #include // require sort next_permutation count __gcd reverse etc. #include // require abs exit atof atoi #include // require scanf printf #include #include // require accumulate #include // require fabs #include #include #include #include // require setw #include // require stringstream #include // require memset #include // require tolower, toupper #include // require freopen #include // require srand #define rep(i,n) for(int i=0;i<(n);i++) #define ALL(A) A.begin(), A.end() using namespace std; typedef long long ll; typedef pair P; int main() { ios_base::sync_with_stdio(0); int N, L; cin >> N >> L; vector X(N+1, 0 ), W(N+1, 0 ), T(N+1, 0 ); for (int i = 1; i <= N; i++ ) cin >> X[i] >> W[i] >> T[i]; int ct = 0; // 現在の時刻 for (int i = 1; i <= N; i++ ){ ct += X[i] - X[i-1]; // cerr << "ct: " << ct << endl; if (( ct % (2*T[i] ) >= T[i] ) // i 番目の交差点に入ったときが赤 || ((ct + W[i] ) % (2*T[i] ) >= T[i] ) ){ // i 番目の交差点を渡り切らない int wait_time = 2*T[i] - (ct % (2*T[i] ) ); // cerr << "wait_time: " << wait_time << endl; ct += wait_time; // 次の青信号になるまで待つ } // end if } // end for ct += L - X[N]; cout << ct << endl; return 0; }