#include <bits/stdc++.h>
using namespace std;
struct seg {
  long long x, y, w;
  friend bool operator<(seg a, seg b) { return a.y < b.y; }
} a[1000005];
struct node {
  long long x, y;
  friend bool operator<(node a, node b) { return a.x < b.x; }
} s[1000005 * 4];
int n, cnt;
int b[1000005];
long long tag[1000005 * 4];
void build(int p, int l, int r) {
  if (l == r) {
    s[p] = (node){b[l], l};
    return;
  }
  build((p << 1), l, ((l + r) >> 1));
  build((p << 1 | 1), ((l + r) >> 1) + 1, r);
  s[p] = max(s[(p << 1)], s[(p << 1 | 1)]);
}
void push_down(int p) {
  tag[(p << 1)] += tag[p], tag[(p << 1 | 1)] += tag[p];
  s[(p << 1)].x += tag[p], s[(p << 1 | 1)].x += tag[p];
  tag[p] = 0;
}
void update(int p, int l, int r, int ul, int ur, long long k) {
  if (l >= ul && r <= ur) {
    tag[p] += k;
    s[p].x += k;
    return;
  }
  push_down(p);
  if (((l + r) >> 1) >= ul) update((p << 1), l, ((l + r) >> 1), ul, ur, k);
  if (((l + r) >> 1) < ur)
    update((p << 1 | 1), ((l + r) >> 1) + 1, r, ul, ur, k);
  s[p] = max(s[(p << 1)], s[(p << 1 | 1)]);
}
node query(int p, int l, int r, int ul, int ur) {
  if (l >= ul && r <= ur) return s[p];
  push_down(p);
  node res = (node){0, 0};
  if (((l + r) >> 1) >= ul)
    res = max(res, query((p << 1), l, ((l + r) >> 1), ul, ur));
  if (((l + r) >> 1) < ur)
    res = max(res, query((p << 1 | 1), ((l + r) >> 1) + 1, r, ul, ur));
  return res;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    scanf("%lld%lld%lld", &a[i].x, &a[i].y, &a[i].w);
    b[++cnt] = a[i].x;
    b[++cnt] = a[i].y;
  }
  sort(b + 1, b + cnt + 1);
  int len = unique(b + 1, b + cnt + 1) - b - 1;
  long long ans = 0, l = 2e9, r = 2e9;
  for (int i = 1; i <= n; ++i) {
    a[i].x = lower_bound(b + 1, b + len + 1, a[i].x) - b;
    a[i].y = lower_bound(b + 1, b + len + 1, a[i].y) - b;
    if (a[i].x > a[i].y) swap(a[i].x, a[i].y);
  }
  sort(a + 1, a + n + 1);
  build(1, 1, len);
  for (int i = 1; i <= n; ++i) {
    do {
      update(1, 1, len, 1, a[i].x, a[i].w);
      i++;
    } while (i <= n && a[i].y == a[i - 1].y);
    i--;
    node t = query(1, 1, len, 1, a[i].y);
    if (t.x - b[a[i].y] > ans && t.y)
      ans = t.x - b[a[i].y], l = b[t.y], r = b[a[i].y];
  }
  printf("%lld\n%lld %lld %lld %lld\n", ans, l, l, r, r);
  return 0;
}
