#pragma comment(linker, "/stack:128000000") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define forn(i, n) for (int i = 0; i < int(n); i++) #define ford(i, n) for (int i = int(n) - 1; i >= 0; i--) #define forl(i, n) for (int i = 1; i <= int(n); i++) #define fore(i, l, r) for (int i = int(l); i <= int(r); i++) #define correct(x, y, n, m) (0 <= (x) && (x) < (n) && 0 <= (y) && (y) < (m)) #define all(a) (a).begin(), (a).end() #define sz(a) int((a).size()) #define pb(a) push_back(a) #define mp(a, b) make_pair((a), (b)) #define x first #define y second #define ft first #define sc second using namespace std; template inline X abs(const X& a) { return a < 0? -a: a; } template inline X sqr(const X& a) { return a * a; } typedef long long li; typedef long double ld; typedef pair pt; const int INF = INT_MAX / 2; const ld EPS = 1e-9; const ld PI = 3.1415926535897932384626433832795; const int N = 4000 + 3; int n; li v[N], d[N], p[N], used[N]; inline bool read() { if (scanf("%d", &n) != 1) return false; forn(i, n) assert(scanf("%d%d%d", &v[i], &d[i], &p[i]) == 3); return true; } inline void solve() { vector ans; forn(i, n) { if (used[i]) continue; if (p[i] < 0) { fore(idx, i + 1, n - 1) p[idx] -= d[i]; continue; } ans.pb(i); int cur = v[i]; int idx = i + 1; while(idx < n && cur > 0) { if (p[idx] <= 0) { if (!used[idx]) { fore(idx2, idx + 1, n - 1) p[idx2] -= d[idx]; used[idx] = true; } idx ++; continue; } p[idx] -= cur; idx++; cur--; } } cout << sz(ans) << endl; forn(i, sz(ans)) cout << ans[i] + 1 << " "; } int main() { #ifdef HP freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout); #endif assert(read()); solve(); return 0; }