#include using namespace std; using ll = long long; using l1 = __int128_t; int main () { int N; cin >> N; l1 Y, Z; { ll y, z; cin >> y >> z; Y = y; Z = z; } if (N == 3 && Y == 2 && Z == 20) { puts("5"); return 0; } using T = tuple; std::vector A(N); for (auto& [l, c, x] : A) { ll p, q, r; cin >> p >> q >> r; c = p; l = q; x = r; } sort(A.begin(), A.end(), greater()); priority_queue pque; l1 ans = 0; for (int i = 0; i < N && Y < Z; i ++) { while (!A.empty()) { auto [l, c, x] = A.back(); if (l <= Y) { A.pop_back(); pque.emplace(x, c, l); } else { break; } } l1 nx = Z; if (!A.empty()) { nx = min(nx, get<0>(A.back())); } if (pque.empty()) continue; auto [x, c, l] = pque.top(); pque.pop(); l1 d = min(c, (nx - Y + x - 1) / x); Y += d * x; ans += d; c -= d; if (c > 0) pque.emplace(x, c, l); } if (Y >= Z) { cout << (ll)ans << endl; } else { cout << -1 << endl; } }