# 문제 분류
이분 탐색
던전 들어가는게 까다로움. -1 해주는 것 처리 안하면 안됨. 서로 1턴만에 죽는 상황에서 플레이어가 우위에 있으므로 피가 0턴만큼 깎여야만함 ,,
#include <algorithm>
#include <cmath>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
#define endl "\n"
using namespace std;
typedef struct Room {
Room(int t, int a, int h) : t(t), a(a), h(h) {}
int t, a, h;
} room;
typedef long long ll;
typedef pair<ll, ll> pl;
typedef pair<int, int> pi;
typedef vector<int> vi;
typedef vector<pi> vii;
const ll MOD = 1e9 + 7;
const int stMAX = 1 << 18;
const int INF = 1e9;
int N, H, t, a, h;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> H;
vector<Room> v;
for (int i = 0; i < N; i++) {
cin >> t >> a >> h;
v.emplace_back(t, a, h);
}
ll l = 1, r = 1e18;
while (l <= r) {
ll mid = l + r >> 1;
ll curr_hp = mid, curr_atk = H, flag = 0;
for (auto &p : v) {
if (p.t == 1) {
if ((p.h - 1) / curr_atk > (curr_hp - 1) / p.a) {
flag = 1;
break;
}
curr_hp -= (p.h - 1) / curr_atk * p.a;
} else {
curr_hp = curr_hp + p.h > mid ? mid : curr_hp + p.h;
curr_atk += p.a;
}
}
if (flag == 0) {
r = mid - 1;
} else {
l = mid + 1;
}
}
cout << l;
}