#include using namespace std; using ll = long long; [[maybe_unused]] constexpr ll INF = (1LL << 60) - 1; void solve() { ll n, y, z; cin >> n >> y >> z; vector c(n), l(n), x(n); for (ll i = 0; i < n; ++i) { cin >> c[i] >> l[i] >> x[i]; } vector idx(n); iota(idx.begin(), idx.end(), 0); sort(idx.begin(), idx.end(), [&](ll p, ll q) { return l[p] < l[q]; }); if (y < l[idx[0]]) { cout << -1 << "\n"; return; } priority_queue> que; ll ans = 0; for (ll i = 0; i < n; ++i) { que.emplace(x[idx[i]], c[idx[i]]); ll t = (i == n - 1) ? z : l[idx[i + 1]]; while (!que.empty()) { auto [up, cnt] = que.top(); que.pop(); if ((t - y) / up > cnt) { y += up * cnt; ans += cnt; } else { ll used = (t - y - 1) / up + 1; y += up * used; if (cnt - used > 0) que.emplace(up, cnt - used); ans += used; break; } } if (y < t) { cout << -1 << "\n"; return; } } cout << ans << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll t = 1; // cin >> t; while (t--) { solve(); } return 0; }