#include #include using namespace std; using namespace atcoder; using mint = modint998244353; //using mint = modint1000000007; typedef long long ll; typedef pair P; typedef tuple T; templatebool chmax(T& a, const T& b) { if (a < b) { a = b;return true; } else { return false; } } templatebool chmin(T& a, const T& b) { if (a > b) { a = b;return true; } else { return false; } } template void dbg(Args&&... args) { ((cout << args << ' '), ...);cout << '\n'; } const int di[] = { -1,0,1,0 }; const int dj[] = { 0,-1,0,1 }; const long long INF = 6000000000000000000; const int inf = 1001001001; int main(void) { int n; cin >> n; ll y, z; cin >> y >> z; vector c(n, 0), l(n, 0), x(n, 0); priority_queue

pq; priority_queue, greater> pqu; for (int i = 0; i < n; i++) { cin >> c[i] >> l[i] >> x[i]; if (l[i] <= y)pq.emplace(x[i], c[i]); else pqu.emplace(l[i], x[i], c[i]); } pqu.emplace(INF, 0, 0); ll ans = 0; while (pqu.size()) { auto [L, X, C] = pqu.top();pqu.pop(); // cout << 'y'; // dbg(y); if (y >= L) { pq.emplace(X, C); continue; } while (pq.size()) { auto [X2, C2] = pq.top();pq.pop(); // cout << "y+"; // dbg(y + X2 * C2, L); if (y + X2 * C2 >= L) { ll cnt = (L - y + X2 - 1) / X2; // cout << "cnt"; // dbg(cnt); if (z <= y + X2 * cnt) { ll ok = (z - y + X2 - 1) / X2; cout << ans + ok << "\n"; return 0; } ans += cnt; if (cnt != C2)pq.emplace(X2, C2 - cnt); y += X2 * cnt; break; } else { if (z <= y + X2 * C2) { ll ok = (z - y + X2 - 1) / X2; cout << ans + ok << "\n"; return 0; } ans += C2; y += X2 * C2; } } if (y >= L)pq.emplace(X, C); } cout << -1 << "\n"; }