#include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair Pii; const ll mod = 998244353; int main() { cin.tie(0); ios::sync_with_stdio(false); ll n, y, z; cin >> n >> y >> z; vector c(n), l(n), x(n); for (int i = 0; i < n; i++) { cin >> c[i] >> l[i] >> x[i]; } priority_queue> defeat_que; priority_queue, vector>, greater>> locked_que; for (int i = 0; i < n; i++) { if (y >= l[i]) { defeat_que.emplace(x[i], c[i]); } else { locked_que.emplace(l[i], x[i], c[i]); } } ll ans = 0; ll current_level = y; while (!defeat_que.empty()) { auto next_defeat = defeat_que.top(); defeat_que.pop(); ll target_level; if (!locked_que.empty()) { auto next_locked = locked_que.top(); target_level = min(z, get<0>(next_locked)); } else { target_level = z; } auto defeat_count = min(next_defeat.second, (target_level - current_level + next_defeat.first - 1) / next_defeat.first); ans += defeat_count; current_level += next_defeat.first * defeat_count; if (defeat_count < next_defeat.second) { defeat_que.emplace(next_defeat.first, next_defeat.second - defeat_count); } while (!locked_que.empty()) { auto next_unlock = locked_que.top(); if (current_level >= get<0>(next_unlock)) { defeat_que.emplace(get<1>(next_unlock), get<2>(next_unlock)); locked_que.pop(); } else { break; } } if (current_level >= z) break; } if (current_level >= z) { cout << ans << endl; } else { cout << -1 << endl; } return 0; }