#include using namespace std; using P = pair; int main(){ int N; long long 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]; } vector

border(N); for(int i = 0; i < N; i++){ border[i] = make_pair(L[i], i); } border.emplace_back(Z, -1); sort(border.begin(), border.end()); priority_queue

pq; for(int i = 0; i < N; i++){ if(L[i] <= Y){ pq.emplace(X[i], C[i]); } } long long cur = Y, ans = 0; int k = upper_bound(border.begin(), border.end(), make_pair(cur, 1LL << 60)) - border.begin(); while(pq.size() && cur < Z){ auto [nxt, idx] = border[k]; if(nxt <= cur){ if(idx != -1){ pq.emplace(X[idx], C[idx]); } k++; continue; } auto [x, c] = pq.top(); pq.pop(); long long cnt = min((nxt - cur + x - 1) / x, c); cur += cnt * x; ans += cnt; if(cnt != c) pq.emplace(x, c - cnt); } if(cur < Z) cout << -1 << endl; else cout << ans << endl; }