#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500010;
const int MX = 1 << 19;
const long long LINF = 1ll << 60;
struct DOT {
  int x, y, c;
} D[MAXN];
int ys[MAXN], ysn;
pair<long long, int> seg[2 * MX];
long long lazy[2 * MX];
void mkseg(int idx, int l, int r) {
  seg[idx] = make_pair(ys[r], r);
  if (l < r) {
    int m = (l + r) / 2;
    mkseg(idx * 2, l, m);
    mkseg(idx * 2 + 1, m + 1, r);
  }
}
void updseg(int idx, int l, int r, int x, int y, int z) {
  if (x <= l && r <= y) {
    seg[idx].first += z;
    lazy[idx] += z;
  } else if (l <= y && x <= r) {
    int m = (l + r) / 2;
    updseg(idx * 2, l, m, x, y, z);
    updseg(idx * 2 + 1, m + 1, r, x, y, z);
    seg[idx] = max(seg[idx * 2], seg[idx * 2 + 1]);
    seg[idx].first += lazy[idx];
  }
}
void updseg(int x, int z) { updseg(1, 0, ysn - 1, 0, x, z); }
pair<long long, int> gseg(int idx, int l, int r, int x, int y) {
  if (x <= l && r <= y) return seg[idx];
  if (r < x || y < l) return make_pair(-LINF, 0);
  int m = (l + r) / 2;
  pair<long long, int> t =
      max(gseg(idx * 2, l, m, x, y), gseg(idx * 2 + 1, m + 1, r, x, y));
  t.first += lazy[idx];
  return t;
}
pair<long long, int> gseg(int x, int y) { return gseg(1, 0, ysn - 1, x, y); }
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int N;
  cin >> N;
  for (int i = 0; i < N; i++) cin >> D[i].x >> D[i].y >> D[i].c;
  for (int i = 0; i < N; i++)
    if (D[i].y > D[i].x) swap(D[i].x, D[i].y);
  sort(D, D + N, [&](const DOT a, const DOT b) { return a.x < b.x; });
  for (int i = 0; i < N; i++) ys[i] = D[i].y;
  sort(ys, ys + N);
  ysn = unique(ys, ys + N) - ys;
  mkseg(1, 0, ysn - 1);
  long long ans = 0;
  int x1 = ys[ysn - 1] + 1, x2 = ys[ysn - 1] + 1;
  for (int i = 0; i < N; i++) {
    updseg(lower_bound(ys, ys + ysn, D[i].y) - ys, D[i].c);
    if (i == N - 1 || D[i].x < D[i + 1].x) {
      pair<long long, int> t =
          gseg(0, upper_bound(ys, ys + ysn, D[i].x) - ys - 1);
      t.first -= D[i].x;
      if (t.first > ans) {
        ans = t.first;
        x1 = ys[t.second];
        x2 = D[i].x;
      }
    }
  }
  cout << ans << "\n" << x1 << " " << x1 << " " << x2 << " " << x2;
  return 0;
}
