#include <bits/stdc++.h>
using namespace std;
template <typename T>
void chkmax(T &x, T y) {
  x = x > y ? x : y;
}
template <typename T>
void chkmin(T &x, T y) {
  x = x > y ? y : x;
}
template <typename T>
void read(T &x) {
  x = 0;
  int f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
  x *= f;
}
const int N = 1000010;
vector<int> v1[N], v2[N];
long long b[N], sum[N];
struct Node {
  int l, r, v;
} a[N];
struct SegmentTree {
  const static int M = N << 2;
  long long mx[M], del[M];
  int id[M];
  void update(int k) {
    mx[k] = max(mx[k << 1], mx[k << 1 | 1]);
    id[k] = mx[k] == mx[k << 1] ? id[k << 1] : id[k << 1 | 1];
  }
  void pushdown(int k) {
    long long x = del[k];
    del[k] = 0;
    mx[k << 1] += x, del[k << 1] += x;
    mx[k << 1 | 1] += x, del[k << 1 | 1] += x;
  }
  void build(int k, int l, int r) {
    if (l == r) return mx[k] = sum[l], id[k] = l, void();
    int mid = (l + r) >> 1;
    build(k << 1, l, mid), build(k << 1 | 1, mid + 1, r);
    update(k);
  }
  void modify(int k, int l, int r, int L, int R, int x) {
    if (L <= l && r <= R) return mx[k] += x, del[k] += x, void();
    if (del[k]) pushdown(k);
    int mid = (l + r) >> 1;
    if (L <= mid) modify(k << 1, l, mid, L, R, x);
    if (R > mid) modify(k << 1 | 1, mid + 1, r, L, R, x);
    update(k);
  }
  pair<long long, int> query(int k, int l, int r, int L, int R) {
    if (L <= l && r <= R) return make_pair(mx[k], id[k]);
    if (del[k]) pushdown(k);
    int mid = (l + r) >> 1;
    pair<long long, int> ret = make_pair(-LONG_MAX, 0);
    if (L <= mid) chkmax(ret, query(k << 1, l, mid, L, R));
    if (R > mid) chkmax(ret, query(k << 1 | 1, mid + 1, r, L, R));
    return ret;
  }
} T;
int main() {
  int n, tot = 0;
  read(n);
  for (int i = 1; i <= n; i++) {
    int x, y;
    read(x), read(y), read(a[i].v);
    a[i].l = min(x, y), a[i].r = max(x, y);
    b[++tot] = x, b[++tot] = y;
  }
  sort(b + 1, b + tot + 1), tot = unique(b + 1, b + tot + 1) - b - 1;
  for (int i = 1; i <= n; i++)
    a[i].l = lower_bound(b + 1, b + tot + 1, a[i].l) - b,
    a[i].r = lower_bound(b + 1, b + tot + 1, a[i].r) - b;
  for (int i = 1; i <= n; i++)
    v1[a[i].l].emplace_back(i), v2[a[i].r].emplace_back(i);
  for (int i = 1; i <= tot; i++) {
    sum[i] = sum[i - 1];
    for (int j : v2[i]) sum[i] += a[j].v;
  }
  for (int i = 1; i <= tot; i++) sum[i] -= b[i];
  T.build(1, 1, tot);
  long long ans = 0, l = b[tot] + 1, r = l;
  for (int i = 1; i <= tot; i++) {
    pair<long long, int> tmp = T.query(1, 1, tot, i, tot);
    if (ans < tmp.first + b[i])
      ans = tmp.first + b[i], l = b[i], r = b[tmp.second];
    for (int j : v1[i]) T.modify(1, 1, tot, a[j].r, tot, -a[j].v);
  }
  cout << ans << '\n';
  cout << l << ' ' << l << ' ' << r << ' ' << r << '\n';
  return 0;
}
