/*
* Problem :: 2980 / 도로와 신호등
*
* Kind :: Simulation
*
* Insight
* - 신호등을 마주쳤을 때 빨간불이면
* 초록불이 될 때까지 기다린다
* + 1 - 신호등을 마주칠 때까지 이동
* 2 - 마주쳤을 때 초록불이면 그냥 지나감
* 빨간불이면 초록불이 될 때까지 기다림
* 도로의 끝까지 이동하면서 1,2 반복
*
* Point
* - 상근이의 트럭이 도로에 진입했을 때,
* 모든 신호등의 색상은 빨간색이고 사이클이 막 시작한 상태이다
* + R=1, G=2 이면
* 시간 | 색깔
* 0 | 빨
* 1 | 초
* 2 | 초
* 3 | 빨
* 4 | 초
* 5 | 초
* ......
* # 주기는 (R+G)
* 시간이 T 일 때,
* T % (R+G) 의 값이 R 보다 작으면 빨간불
* R 이상이면 초록불이다!
*/
//
// BOJ
// ver.C++
//
// Created by GGlifer
//
// Open Source
#include <iostream>
using namespace std;
#define endl '\n'
// Set up : Global Variables
/* None */
// Set up : Functions Declaration
/* None */
int main()
{
// Set up : I/O
ios::sync_with_stdio(false);
cin.tie(nullptr);
// Set up : Input
int N, L;
cin >> N >> L;
int D[N], R[N], G[N];
for (int i=0; i<N; i++)
cin >> D[i] >> R[i] >> G[i];
// Process
int time = 0, cd = 0; /* 시간, 현재 이동한 거리 */
for (int i=0; i<N; i++) {
int d = D[i], r = R[i], g = G[i]; /* 마주친 신호등의 정보 */
time += (d-cd); /* 신호등을 마주칠 때까지 이동한 시간 추가 */
cd = d; /* 현재 이동한 거리 갱신 */
int v = time % (r+g); /* 신호등 색깔 판단 */
if (v < r) { /* 빨간불이면 */
time += r-v; /* 초록불이 될때까지 대기 */
} else continue; /* 초록불이면 그냥 지나감 */
} time += (L-cd); /* 마지막 신호등으로부터 도로 끝까지 이동한 시간 추가 */
// Control : Output
cout << time << endl;
}
// Helper Functions
/* None */