#include <bits/stdc++.h>
using namespace std;
namespace TYC {
const int N = 1e6 + 5;
int n, m, V[N];
struct point {
  int x, y, c;
  bool operator<(const point &t) const { return max(x, y) < max(t.x, t.y); }
} P[N];
struct node {
  pair<long long, int> val;
  long long tag;
  void add(const long long x) { val.first += x, tag += x; }
} tr[N << 2];
inline void pushdown(const int o) {
  long long t = tr[o].tag;
  if (t) {
    tr[o].tag = 0;
    tr[(o << 1)].add(t);
    tr[(o << 1 | 1)].add(t);
  }
}
void build(const int o, const int l, const int r) {
  if (l == r) return void(tr[o] = (node){pair<long long, int>(V[l], V[l]), 0});
  int mid = (l + r) >> 1;
  build((o << 1), l, mid);
  build((o << 1 | 1), mid + 1, r);
  tr[o].val = max(tr[(o << 1)].val, tr[(o << 1 | 1)].val);
}
void modify(const int s, const int e, const long long v, const int o = 1,
            const int l = 1, const int r = m) {
  if (s <= l && r <= e) return tr[o].add(v);
  pushdown(o);
  int mid = (l + r) >> 1;
  if (s <= mid) modify(s, e, v, (o << 1), l, mid);
  if (e > mid) modify(s, e, v, (o << 1 | 1), mid + 1, r);
  tr[o].val = max(tr[(o << 1)].val, tr[(o << 1 | 1)].val);
}
pair<long long, int> query(const int s, const int e, const int o = 1,
                           const int l = 1, const int r = m) {
  if (s <= l && r <= e) return tr[o].val;
  pushdown(o);
  int mid = (l + r) >> 1;
  pair<long long, int> ans = pair<long long, int>(0, 0);
  if (s <= mid) ans = max(ans, query(s, e, (o << 1), l, mid));
  if (e > mid) ans = max(ans, query(s, e, (o << 1 | 1), mid + 1, r));
  return ans;
}
void work() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d%d", &P[i].x, &P[i].y, &P[i].c);
    V[++m] = P[i].x;
    V[++m] = P[i].y;
  }
  sort(V + 1, V + 1 + m);
  m = int(unique(V + 1, V + 1 + m) - V - 1);
  for (int i = 1; i <= n; i++) {
    P[i].x = int(lower_bound(V + 1, V + 1 + m, P[i].x) - V);
    P[i].y = int(lower_bound(V + 1, V + 1 + m, P[i].y) - V);
  }
  sort(P + 1, P + 1 + n);
  long long mxs = 0;
  int a = V[m] + 1, b = V[m] + 1;
  build(1, 1, m);
  for (int i = 1, j = 1; i <= m; i++) {
    while (j <= n && max(P[j].x, P[j].y) <= i)
      modify(1, min(P[j].x, P[j].y), P[j].c), j++;
    pair<long long, int> t = query(1, i);
    t.first -= V[i];
    if (t.first > mxs) {
      mxs = t.first;
      a = t.second;
      b = V[i];
    }
  }
  printf("%lld\n%d %d %d %d\n", mxs, a, a, b, b);
}
}  // namespace TYC
int main() {
  TYC::work();
  return 0;
}
