//GNU C++17可以AC,Clang++17 Diagnostics会超时,可能解除读入同步对它无用。
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int x[1000007],y[1000007];
long long a[1000007];
int cc[2000007];
vector<pair<int,long long> >v[2000007];
long long mx[4000007],lz[4000007],mxid[4000007];
long long cmx,cid;
int n,cnt;
void up(int rt){
 if(mx[rt<<1]>=mx[rt<<1|1]){
 mx[rt]=mx[rt<<1];
 mxid[rt]=mxid[rt<<1];
 }
 else{
 mx[rt]=mx[rt<<1|1];
 mxid[rt]=mxid[rt<<1|1];
 }
}
void down(int rt){
 lz[rt<<1]+=lz[rt];
 lz[rt<<1|1]+=lz[rt];
 mx[rt<<1]+=lz[rt];
 mx[rt<<1|1]+=lz[rt];
 lz[rt]=0;
}
void build(int rt,int l,int r){
 if(l==r){
 mx[rt]=-cc[l];
 mxid[rt]=l;
 return ;
 }
 build(rt<<1,l,(l+r)>>1);
 build(rt<<1|1,((l+r)>>1)+1,r);
 up(rt);
}
void update(int rt,int l,int r,int L,int R,long long k){
 if(L<=l&&r<=R){
 lz[rt]+=k;
 mx[rt]+=k;
 return ;
 }
 down(rt);
 if(L<=((l+r)>>1))
 update(rt<<1,l,(l+r)>>1,L,R,k);
 if(R>((l+r)>>1))
 update(rt<<1|1,((l+r)>>1)+1,r,L,R,k);
 up(rt);
}
void query(int rt,int l,int r,int L,int R){
 if(L<=l&&r<=R){
 if(mx[rt]>cmx){
 cmx=mx[rt];
 cid=mxid[rt];
 }
 return ;
 }
 down(rt);
 if(L<=((l+r)>>1))
 query(rt<<1,l,(l+r)>>1,L,R);
 if(R>((l+r)>>1))
 query(rt<<1|1,((l+r)>>1)+1,r,L,R);
}
int main(){
 ios::sync_with_stdio(false);
 cin.tie(NULL);
 cout.tie(NULL);
 cnt=0;
 cin>>n;
 for(int i=1;i<=n;++i){
 cin>>x[i]>>y[i]>>a[i];
 cc[++cnt]=x[i];
 cc[++cnt]=y[i];
 }
 sort(cc+1,cc+1+cnt);
 cnt=unique(cc+1,cc+1+cnt)-(cc+1);
 for(int i=1;i<=n;++i){
 x[i]=lower_bound(cc+1,cc+1+cnt,x[i])-cc;
 y[i]=lower_bound(cc+1,cc+1+cnt,y[i])-cc;
 if(x[i]>y[i])
 swap(x[i],y[i]);
 v[x[i]].push_back({y[i],a[i]});
 }
 long long ans=0;
 int cx=cc[cnt]+1;
 int cy=cx;
 build(1,1,cnt);
 for(int i=cnt;i;--i){
 for(int j=0;j<v[i].size();++j){
 int r=v[i][j].first;
 long long w=v[i][j].second;
 update(1,1,cnt,r,cnt,w);
 }
 cmx=-2e18;
 cid=-1;
 query(1,1,cnt,i,cnt);
 if(ans<cmx+cc[i]){
 ans=cmx+cc[i];
 cx=cc[i];
 cy=cc[cid];
 }
 }
 cout<<ans<<"\n";
 cout<<cx<<" "<<cx<<" "<<cy<<" "<<cy;
 return 0;
}
