#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5, inf = 1e9 + 5;
char buf[1 << 12], *pp1 = buf, *pp2 = buf, nc;
int ny;
inline char gc() {
  return pp1 == pp2 &&
                 (pp2 = (pp1 = buf) + fread(buf, 1, 1 << 12, stdin), pp1 == pp2)
             ? EOF
             : *pp1++;
}
inline int read() {
  int x = 0;
  for (ny = 1; nc = gc(), (nc < 48 || nc > 57) && nc != EOF;)
    if (nc == 45) ny = -1;
  if (nc < 0) return nc;
  for (x = nc - 48; nc = gc(), 47 < nc && nc < 58 && nc != EOF;
       x = (x << 3) + (x << 1) + (nc ^ 48))
    ;
  return x * ny;
}
int n, p[MAXN], tot;
struct Node {
  int x, y, c;
} a[MAXN];
vector<int> s[MAXN];
pair<long long, int> Mn[MAXN << 2];
long long t[MAXN << 2];
inline void pushup(int x) { Mn[x] = min(Mn[x << 1], Mn[x << 1 | 1]); }
inline void pushr(int x, long long v) { Mn[x].first += v, t[x] += v; }
inline void pushdown(int x) {
  if (t[x]) pushr(x << 1, t[x]), pushr(x << 1 | 1, t[x]), t[x] = 0;
}
inline void insert(int x, int l, int r, int p, long long v) {
  if (l == r) {
    Mn[x].first += v;
    return;
  }
  int mid = l + r >> 1;
  pushdown(x);
  (p <= mid ? insert(x << 1, l, mid, p, v)
            : insert(x << 1 | 1, mid + 1, r, p, v)),
      pushup(x);
}
inline void add(int x, int l, int r, int ql, int qr, int v) {
  if (ql > qr) return;
  if (ql <= l && r <= qr) return pushr(x, v);
  int mid = l + r >> 1;
  pushdown(x);
  if (ql <= mid) add(x << 1, l, mid, ql, qr, v);
  if (qr > mid) add(x << 1 | 1, mid + 1, r, ql, qr, v);
  pushup(x);
}
inline pair<long long, int> ask(int x, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) return Mn[x];
  int mid = l + r >> 1;
  pair<long long, int> res = make_pair((long long)1e18, 0);
  pushdown(x);
  if (ql <= mid) res = min(res, ask(x << 1, l, mid, ql, qr));
  if (qr > mid) res = min(res, ask(x << 1 | 1, mid + 1, r, ql, qr));
  return res;
}
inline void build(int x, int l, int r) {
  if (l == r) {
    Mn[x] = make_pair(-p[l], l);
    return;
  }
  int mid = l + r >> 1;
  build(x << 1, l, mid), build(x << 1 | 1, mid + 1, r), pushup(x);
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    int x = read(), y = read(), w = read();
    p[++tot] = x, p[++tot] = y, a[i] = (Node){x, y, w};
  }
  sort(p + 1, p + tot + 1), tot = unique(p + 1, p + tot + 1) - p - 1,
                            build(1, 1, tot);
  for (int i = 1; i <= n; i++)
    a[i].x = lower_bound(p + 1, p + tot + 1, a[i].x) - p,
    a[i].y = lower_bound(p + 1, p + tot + 1, a[i].y) - p;
  for (int i = 1; i <= n; i++) s[max(a[i].x, a[i].y)].push_back(i);
  long long sum = 0, ans = 0, px, py;
  int flg = 0;
  for (int i = 1; i <= tot; i++) {
    insert(1, 1, tot, i, sum);
    for (auto o : s[i])
      sum += a[o].c, add(1, 1, tot, min(a[o].x, a[o].y) + 1, i, a[o].c);
    pair<long long, int> t = ask(1, 1, tot, 1, i);
    if (sum - p[i] - t.first > ans)
      ans = sum - p[i] - t.first, px = p[i], py = p[t.second], flg = 1;
  }
  if (flg)
    cout << ans << '\n' << py << ' ' << py << " " << px << ' ' << px << "\n";
  else
    cout << 0 << "\n" << inf << " " << inf << " " << inf << ' ' << inf << '\n';
  return 0;
}
