#include <bits/stdc++.h>
using namespace std;
void setIO(const string &name = "") {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  if (name.length()) {
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
  }
}
template <typename T>
void read(vector<T> &a) {
  for (auto &x : a) cin >> x;
}
template <typename T>
void read(vector<T> &a, long long n) {
  a.resize(n);
  for (auto &x : a) cin >> x;
}
template <class T, class U>
ostream &operator<<(ostream &out, const pair<T, U> &v) {
  out << "(";
  out << v.first << "," << v.second;
  return out << ")";
}
template <class T>
ostream &operator<<(ostream &out, const vector<T> &v) {
  out << "[";
  for (auto(i) = 0; (i) < ((long long)(v).size()); (i)++) {
    if (i) out << ", ";
    out << v[i];
  }
  return out << "]";
}
template <typename T>
void print(vector<T> &a) {
  for (const auto &x : a) cout << x << ' ';
  cout << '\n';
}
void MOD(long long &x, long long m = 1000000007) {
  x %= m;
  if (x < 0) x += m;
}
template <typename T>
void dbg(const char *name, T &&arg1) {
  cout << name << " : " << arg1 << '\n';
}
template <typename T, typename... U>
void dbg(const char *names, T &&arg1, U &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  dbg(comma + 1, args...);
}
template <class T>
void read(T &x) {
  cin >> x;
}
template <class T, class... U>
void read(T &t, U &...u) {
  read(t);
  read(u...);
}
long long gcd(long long a, long long b) { return !a ? b : gcd(b % a, a); }
struct object {
  long long t, d, p, idx;
};
bool comp(const object &x, const object &y) { return x.d < y.d; }
long long n;
vector<object> v;
long long dp[2002][102];
vector<long long> items;
long long f(long long time, long long idx) {
  if (idx == n) return dp[time][idx] = 0;
  if (dp[time][idx] != -1) return dp[time][idx];
  long long res = 0;
  res = max(res, f(time, idx + 1));
  if (time + v[idx].t < v[idx].d)
    res = max(res, f(time + v[idx].t, idx + 1) + v[idx].p);
  return dp[time][idx] = res;
}
void recover(long long time, long long idx) {
  if (idx == n) return;
  const long long res = dp[time][idx];
  if (res == dp[time][idx + 1]) {
    recover(time, idx + 1);
    return;
  }
  if (time + v[idx].t < v[idx].d and
      res == (dp[time + v[idx].t][idx + 1] + v[idx].p)) {
    items.emplace_back(v[idx].idx + 1);
    recover(time + v[idx].t, idx + 1);
    return;
  }
  assert(false);
}
int32_t main() {
  setIO();
  read(n);
  v.resize(n);
  for (auto(i) = 0; (i) < (n); (i)++) {
    read(v[i].t, v[i].d, v[i].p);
    v[i].idx = i;
  }
  sort((v).begin(), (v).end(), comp);
  memset(dp, -1, sizeof dp);
  cout << f(0, 0) << '\n';
  recover(0, 0);
  cout << (long long)(items).size() << '\n';
  print(items);
  return 0;
}
