#include <bits/stdc++.h>
using namespace std;
const long long N = 1000005;
struct ans {
  long long p, x, y;
  bool operator<(const ans k) const { return p < k.p; }
} r, h;
long long n, m, x[N], y[N], c[N], tag[N << 2];
vector<long long> v;
vector<pair<long long, long long>> q[N];
pair<long long, long long> tr[N << 2];
void pushdown(long long k) {
  if (tag[k]) {
    tr[k << 1].first += tag[k];
    tag[k << 1] += tag[k];
    tr[k << 1 | 1].first += tag[k];
    tag[k << 1 | 1] += tag[k];
    tag[k] = 0;
  }
}
void build(long long k, long long l, long long r) {
  if (l == r) {
    tr[k] = make_pair(v[l - 1], l);
    return;
  }
  long long mid = l + r >> 1;
  build(k << 1, l, mid);
  build(k << 1 | 1, mid + 1, r);
  tr[k] = max(tr[k << 1], tr[k << 1 | 1]);
}
void update(long long k, long long l, long long r, long long a, long long b,
            long long v) {
  if (l == a && r == b) {
    tr[k].first += v;
    tag[k] += v;
    return;
  }
  pushdown(k);
  long long mid = l + r >> 1;
  if (b <= mid)
    update(k << 1, l, mid, a, b, v);
  else if (a > mid)
    update(k << 1 | 1, mid + 1, r, a, b, v);
  else
    update(k << 1, l, mid, a, mid, v),
        update(k << 1 | 1, mid + 1, r, mid + 1, b, v);
  tr[k] = max(tr[k << 1], tr[k << 1 | 1]);
}
pair<long long, long long> query(long long k, long long l, long long r,
                                 long long a, long long b) {
  if (l == a && r == b) return tr[k];
  pushdown(k);
  long long mid = l + r >> 1;
  if (b <= mid)
    return query(k << 1, l, mid, a, b);
  else if (a > mid)
    return query(k << 1 | 1, mid + 1, r, a, b);
  else
    return max(query(k << 1, l, mid, a, mid),
               query(k << 1 | 1, mid + 1, r, mid + 1, b));
}
signed main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> x[i] >> y[i] >> c[i];
    if (x[i] > y[i]) swap(x[i], y[i]);
    v.push_back(x[i]);
    v.push_back(y[i]);
  }
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
  m = v.size();
  for (long long i = 1; i <= n; i++) {
    x[i] = lower_bound(v.begin(), v.end(), x[i]) - v.begin() + 1;
    y[i] = lower_bound(v.begin(), v.end(), y[i]) - v.begin() + 1;
    q[y[i]].emplace_back(x[i], c[i]);
  }
  build(1, 1, m);
  r = {0, 2000000000, 2000000000};
  for (long long y = 1; y <= m; y++) {
    for (auto it : q[y]) update(1, 1, m, 1, it.first, it.second);
    pair<long long, long long> d = query(1, 1, m, 1, y);
    long long c = d.first, x = d.second;
    h = {c - v[y - 1], v[x - 1], v[y - 1]};
    if (r < h) r = h;
  }
  cout << r.p << endl << r.x << ' ' << r.x << ' ' << r.y << ' ' << r.y << endl;
  return 0;
}
