#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int inf = 0x3f3f3f3f;
const int maxn = 5e5 + 5;
const int mod = 1e9 + 7;
struct Point {
  int x, y, c;
  bool operator<(const Point& o) const { return y < o.y; }
} p[maxn];
int X[maxn * 2], N, n;
struct node {
  ll mn;
  int pos;
  node operator+(node o) {
    if (mn <= o.mn) return *this;
    return o;
  }
} nd[maxn * 8];
ll lazy[maxn * 8];
void build(int i, int L, int R) {
  lazy[i] = 0;
  if (L == R) {
    nd[i] = {-X[L], L};
    return;
  }
  int mid = (L + R) >> 1;
  build(i << 1, L, mid);
  build((i << 1) | 1, mid + 1, R);
  nd[i] = nd[i << 1] + nd[(i << 1) | 1];
}
void getdown(int i, ll c) {
  nd[i].mn += c;
  lazy[i] += c;
}
void push_down(int i) {
  getdown(i << 1, lazy[i]);
  getdown((i << 1) | 1, lazy[i]);
  lazy[i] = 0;
}
void modify(int i, int L, int R, int l, int r, ll c) {
  if (l <= L && R <= r) {
    getdown(i, c);
    return;
  }
  if (lazy[i]) push_down(i);
  int mid = (L + R) >> 1;
  if (l <= mid) modify(i << 1, L, mid, l, r, c);
  if (mid < r) modify((i << 1) | 1, mid + 1, R, l, r, c);
  nd[i] = nd[i << 1] + nd[(i << 1) | 1];
}
node ask(int i, int L, int R, int l, int r) {
  if (l <= L && R <= r) return nd[i];
  if (lazy[i]) push_down(i);
  int mid = (L + R) >> 1;
  node ret = {(ll)1e18, 0};
  if (l <= mid) ret = ask(i << 1, L, mid, l, r);
  if (mid < r) ret = ret + ask((i << 1) | 1, mid + 1, R, l, r);
  return ret;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> p[i].x >> p[i].y >> p[i].c;
    if (p[i].x > p[i].y) swap(p[i].x, p[i].y);
    X[++N] = p[i].x;
    X[++N] = p[i].y;
  }
  sort(p + 1, p + n + 1);
  sort(X + 1, X + N + 1);
  N = unique(X + 1, X + N + 1) - (X + 1);
  build(1, 1, N);
  ll all = 0, ans = 0;
  int A = 2e9, B = 2e9;
  for (int i = 1, j; i <= n; i = j) {
    j = i;
    int y = lower_bound(X + 1, X + N + 1, p[i].y) - X;
    while (j <= n && p[j].y == p[i].y) {
      int x = lower_bound(X + 1, X + N + 1, p[j].x) - X;
      all += p[j].c;
      if (x + 1 <= N) modify(1, 1, N, x + 1, N, p[j].c);
      j++;
    }
    node tmp = ask(1, 1, N, 1, y);
    ll val = -p[i].y + all - tmp.mn;
    if (val > ans) {
      ans = val;
      A = X[tmp.pos];
      B = p[i].y;
    }
  }
  cout << ans << "\n";
  cout << A << " " << A << " " << B << " " << B << "\n";
  return 0;
}
