#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
long long int c[N], lzy[6 * N], n, x[N], y[N], sz = 0, m2[N];
map<long long int, long long int> m1;
pair<long long int, long long int> tree[6 * N];
vector<pair<long long int, long long int> > v[N];
void build(int lo, int hi, int i) {
  if (lo == hi) {
    tree[i] = {0, lo};
    return;
  }
  int mid = (lo + hi) / 2;
  build(lo, mid, 2 * i);
  build(mid + 1, hi, 2 * i + 1);
  tree[i] = max(tree[2 * i], tree[2 * i + 1]);
}
void update(int lo, int hi, int l, int r, long long int cost, int i) {
  if (lo > r || hi < l) return;
  if (lzy[i]) {
    if (lo != hi) {
      tree[2 * i].first += lzy[i];
      tree[2 * i + 1].first += lzy[i];
      lzy[2 * i] += lzy[i];
      lzy[2 * i + 1] += lzy[i];
    }
    lzy[i] = 0;
  }
  if (lo >= l && hi <= r) {
    tree[i].first += cost;
    lzy[i] += cost;
    return;
  }
  int mid = (lo + hi) / 2;
  update(lo, mid, l, r, cost, 2 * i);
  update(mid + 1, hi, l, r, cost, 2 * i + 1);
  tree[i] = max(tree[2 * i], tree[2 * i + 1]);
}
pair<long long int, long long int> query(int lo, int hi, int l, int r, int i) {
  if (lo > r || hi < l) return {-1e18, 0};
  if (lzy[i]) {
    if (lo != hi) {
      tree[2 * i].first += lzy[i];
      tree[2 * i + 1].first += lzy[i];
      lzy[2 * i] += lzy[i];
      lzy[2 * i + 1] += lzy[i];
    }
    lzy[i] = 0;
  }
  if (lo >= l && hi <= r) {
    return tree[i];
  }
  int mid = (lo + hi) / 2;
  return max(query(lo, mid, l, r, 2 * i), query(mid + 1, hi, l, r, 2 * i + 1));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i <= n - 1; i++) {
    cin >> x[i] >> y[i] >> c[i];
    if (x[i] > y[i]) swap(x[i], y[i]);
    m1[x[i]], m1[y[i]];
  }
  for (__typeof(m1.begin()) it = m1.begin(); it != m1.end(); it++) {
    sz++;
    m1[it->first] = sz;
    m2[sz] = it->first;
  }
  for (int i = 0; i <= n - 1; i++) {
    v[m1[x[i]]].push_back(make_pair(m1[y[i]], c[i]));
  }
  build(1, sz, 1);
  for (int i = 1; i <= sz; i++) {
    update(1, sz, i, i, -m2[i], 1);
  }
  long long int ans = 0;
  pair<long long int, long long int> p = {1e9 + 7, 1e9 + 7};
  for (int i = sz; i >= 1; i--) {
    for (__typeof(v[i].begin()) it = v[i].begin(); it != v[i].end(); it++) {
      long long int y = (it->first), cst = (it->second);
      update(1, sz, y, sz, cst, 1);
    }
    pair<long long int, long long int> q = query(1, sz, i, sz, 1);
    if (q.first + m2[i] > ans) {
      ans = q.first + m2[i];
      p.first = m2[i], p.second = m2[q.second];
    }
  }
  cout << ans;
  cout << "\n";
  cout << p.first << " " << p.first;
  cout << " ";
  cout << p.second << " " << p.second;
  return 0;
}
