#include <bits/stdc++.h>
using namespace std;
const long long lim = 1e5;
const int N = 8e5 + 9;
struct Point {
  long long x, y;
  bool operator<(const Point& b) const {
    if (x == b.x) return y < b.y;
    return x < b.x;
  }
} p[N], ch[N], ans[5];
int cnt = 0;
long long cross(Point a, Point b, Point c) {
  return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y);
}
double dist(Point a, Point b) {
  return sqrt(1.0 * (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
void add(Point tem, long long v) {
  if (tem.x - v >= 0)
    p[cnt++] = (Point){tem.x - v, tem.y};
  else {
    long long deta = v - tem.x;
    long long ya = max((long long)0, tem.y - deta);
    long long yb = min(lim, tem.y + deta);
    p[cnt++] = (Point){(long long)0, ya};
    p[cnt++] = (Point){(long long)0, yb};
  }
  if (tem.x + v <= lim)
    p[cnt++] = (Point){tem.x + v, tem.y};
  else {
    long long deta = v + tem.x - lim;
    long long ya = max((long long)0, tem.y - deta);
    long long yb = min(lim, tem.y + deta);
    p[cnt++] = (Point){lim, ya};
    p[cnt++] = (Point){lim, yb};
  }
  if (tem.y - v >= 0)
    p[cnt++] = (Point){tem.x, tem.y - v};
  else {
    long long deta = v - tem.y;
    long long xa = max((long long)0, tem.x - deta);
    long long xb = min(lim, tem.x + deta);
    p[cnt++] = (Point){xa, (long long)0};
    p[cnt++] = (Point){xb, (long long)0};
  }
  if (tem.y + v <= lim)
    p[cnt++] = (Point){tem.x, tem.y + v};
  else {
    long long deta = v + tem.y - lim;
    long long xa = max((long long)0, tem.x - deta);
    long long xb = min(lim, tem.x + deta);
    p[cnt++] = (Point){xa, lim};
    p[cnt++] = (Point){xb, lim};
  }
}
int Andrew() {
  sort(p, p + cnt);
  int m = 0;
  for (int i = 0; i < cnt; ++i) {
    while (m > 1 && cross(ch[m - 2], p[i], ch[m - 1]) >= 0) --m;
    ch[m++] = p[i];
  }
  int k = m;
  for (int i = cnt - 2; i >= 0; --i) {
    while (m > k && cross(ch[m - 2], p[i], ch[m - 1]) >= 0) --m;
    ch[m++] = p[i];
  }
  if (cnt > 1) --m;
  return m;
}
double CirR(Point a, Point b, Point c) {
  double sth = 1.0 * abs(cross(a, b, c)) / (dist(a, b) * dist(a, c));
  return dist(b, c) / sth;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    long long v;
    Point tem;
    scanf("%lld %lld %lld", &tem.x, &tem.y, &v);
    add(tem, v);
  }
  int m = Andrew();
  double res = 0;
  ch[m] = ch[0];
  ch[m + 1] = ch[1];
  for (int i = 0; i < m; ++i) {
    if (CirR(ch[i], ch[i + 1], ch[i + 2]) > res) {
      res = CirR(ch[i], ch[i + 1], ch[i + 2]);
      ans[0] = ch[i];
      ans[1] = ch[i + 1];
      ans[2] = ch[i + 2];
    }
  }
  for (int i = 0; i < 3; ++i) printf("%lld %lld\n", ans[i].x, ans[i].y);
  return 0;
}
