#include <bits/stdc++.h>
using namespace std;
int n, m = 100000, a, b, c, cnt;
struct Point {
  int x, y;
  Point() {}
  Point(int a, int b) { x = a, y = b; }
  bool operator==(Point b) const { return x == b.x && y == b.y; }
  Point operator+(Point b) { return Point(x + b.x, y + b.y); }
  Point operator-(Point b) { return Point(x - b.x, y - b.y); }
} A[5000005], Q[5000005], P[5000005];
long long Cross(Point a, Point b) {
  return (long long)a.x * b.y - (long long)a.y * b.x;
}
long double Length(Point p) { return sqrt(1.0 * p.x * p.x + 1.0 * p.y * p.y); }
void Add(int x, int y) { A[++cnt] = Point(x, y); }
bool cmp(Point a, Point b) { return a.x == b.x ? a.y < b.y : a.x < b.x; }
long double Abs(long double x) { return x > 0 ? x : -x; }
long double Getr(Point a, Point b, Point c) {
  long double p = Length(a - b), q = Length(b - c), r = Length(c - a);
  long double s = Abs(2.0 * (long double)Cross(b - a, c - a));
  if (s <= 1e-10) return 0;
  return p * q * r / s;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d%d", &a, &b, &c);
    if (a - c >= 0)
      Add(a - c, b);
    else {
      Add(0, min(m, b + c - a));
      Add(0, max(0, b - c + a));
    }
    if (a + c <= m)
      Add(a + c, b);
    else {
      Add(m, min(m, b + c - (m - a)));
      Add(m, max(0, b - c + (m - a)));
    }
    if (b - c >= 0)
      Add(a, b - c);
    else {
      Add(min(m, a + c - b), 0);
      Add(max(0, a - c + b), 0);
    }
    if (b + c <= m)
      Add(a, b + c);
    else {
      Add(min(m, a + c - (m - b)), m);
      Add(max(0, a - c + (m - b)), m);
    }
  }
  sort(A + 1, A + cnt + 1, cmp);
  cnt = unique(A + 1, A + cnt + 1) - A - 1;
  int lst = 0;
  for (int i = 1; i <= cnt; i++) {
    while (lst > 1 && Cross(A[i] - Q[lst], Q[lst] - Q[lst - 1]) >= 0) lst--;
    Q[++lst] = A[i];
  }
  int fir = 0;
  for (int i = cnt; i >= 1; i--) {
    while (fir > 1 && Cross(A[i] - P[fir], P[fir] - P[fir - 1]) >= 0) fir--;
    P[++fir] = A[i];
  }
  for (int i = 2; i < fir; i++) Q[++lst] = P[i];
  long double mx = Getr(Q[lst], Q[1], Q[2]), tmp;
  int a1 = lst, a2 = 1, a3 = 2;
  if ((tmp = Getr(Q[lst - 1], Q[lst], Q[1])) > mx)
    a1 = lst - 1, a2 = lst, a3 = 1, mx = tmp;
  for (int i = 3; i <= lst; i++)
    if ((tmp = Getr(Q[i - 2], Q[i - 1], Q[i])) > mx) a3 = i, mx = tmp;
  if (a3 >= 3) a1 = a3 - 2, a2 = a3 - 1;
  printf("%d %d\n%d %d\n%d %d\n", Q[a1].x, Q[a1].y, Q[a2].x, Q[a2].y, Q[a3].x,
         Q[a3].y);
}
