#include<stdio.h>
#include<vector>
using namespace std;
const int NMAX = 1e5 + 5;
#define mp make_pair
vector < pair <int, int> > sus, jos;
int ccw (pair <int, int> p1, pair <int, int> p2, pair <int, int> p3) {
return (p2.second - p3.second) * (p1.first - p3.first) - (p2.first - p3.first) * (p1.second - p3.second);
}
vector < pair <int, int> > convex (vector < pair<int, int> > pts) {
vector < pair <int, int> > sol;
int i;
sol.push_back(pts[0]);
sol.push_back(pts[1]);
for(i = 2; i < pts.size(); ++ i) {
while(sol.size() >= 2 && ccw(sol[sol.size() - 2], sol[sol.size() - 1], pts[i]) <= 0 )
sol.pop_back();
sol.push_back(pts[i]);
}
return sol;
}
int main() {
freopen("oypara.in", "r", stdin);
freopen("oypara.out", "w", stdout);
int j, iSus, iJos, nSus, nJos, x, y1, y2, n, i;
scanf("%d", &n);
nSus = nJos = 0;
for(i = 1; i <= n; ++ i) {
scanf("%d%d%d", &x, &y1, &y2);
sus.push_back(mp(x, y2));
jos.push_back(mp(x, y1));
}
sort(sus.begin(), sus.end());
sus = convex(sus);
// for(i = 0; i < sus.size(); ++ i)
// printf("%d %d\n", sus[i].first, sus[i].second);
sort(jos.begin(), jos.end());
reverse(jos.begin(), jos.end());
jos = convex(jos);
//for(i = 0; i < jos.size(); ++ i)
// printf("-%d %d\n", jos[i].first, jos[i].second);
j = 0;
for(i = 0; i < sus.size() - 1; ++ i) {
while(j < jos.size() && ccw(sus[i], sus[i + 1], jos[j]) <= 0)
++ j;
// if(i == 0)
// printf("**%d\n", j);
if(j == jos.size()) {
iSus = i;
break;
}
}
for(i = 0; i < jos.size() - 1; ++ i)
if(ccw(jos[i], jos[i + 1], sus[iSus]) <= 0) {
iJos = i;
break;
}
printf("%d %d %d %d\n", sus[iSus].first, sus[iSus].second, jos[iJos].first, jos[iJos].second);
return 0;
}