#include <bits/stdc++.h>
using namespace std;
struct Vector {
  long long x, y;
  Vector operator+(Vector z) { return Vector{x + z.x, y + z.y}; }
  Vector operator-(Vector z) { return Vector{x - z.x, y - z.y}; }
} d[800007];
long long n, cnt, lim = 1e5, st[800007], tp, res;
double mx;
bool in[800007];
long long cross(Vector a, Vector b) { return a.x * b.y - a.y * b.x; }
long long read() {
  long long num = 0;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') num = num * 10 + c - '0', c = getchar();
  return num;
}
long long cmp(Vector a, Vector b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
double calcdis(Vector x) { return sqrt(x.x * x.x + x.y * x.y); }
double check(Vector x, Vector y, Vector z) {
  if (!cross(x - y, x - z)) return 0;
  double a = calcdis(x - z), b = calcdis(y - z), c = calcdis(x - y);
  double p = (a + b + c) / 2, s = sqrt(p * (p - a) * (p - b) * (p - c));
  return a * b * c / (4 * s);
}
signed main() {
  n = read();
  for (long long i = 1; i <= n; i++) {
    long long x = read(), y = read(), r = read();
    if (x + r <= lim)
      d[++cnt] = Vector{x + r, y};
    else
      d[++cnt] = Vector{lim, max(0LL, y - r + (lim - x))},
      d[++cnt] = Vector{lim, min(lim, y + r - (lim - x))};
    if (x - r >= 0)
      d[++cnt] = Vector{x - r, y};
    else
      d[++cnt] = Vector{0, max(0LL, y - r + x)},
      d[++cnt] = Vector{0, min(lim, y + r - x)};
    if (y + r <= lim)
      d[++cnt] = Vector{x, y + r};
    else
      d[++cnt] = Vector{max(0LL, x - r + (lim - y)), lim},
      d[++cnt] = Vector{min(lim, x + r - (lim - y)), lim};
    if (y - r >= 0)
      d[++cnt] = Vector{x, y - r};
    else
      d[++cnt] = Vector{max(0LL, x - r + y), 0},
      d[++cnt] = Vector{min(lim, x + r - y), 0};
  }
  sort(d + 1, d + cnt + 1, cmp);
  st[++tp] = 1;
  for (long long i = 2; i <= cnt; i++) {
    while (tp > 1 &&
           cross(d[st[tp]] - d[st[tp - 1]], d[i] - d[st[tp - 1]]) >= 0)
      in[st[tp--]] = 0;
    st[++tp] = i;
    in[i] = 1;
  }
  long long lst = tp;
  for (long long i = cnt; i >= 1; i--)
    if (!in[i]) {
      while (tp > lst &&
             cross(d[st[tp]] - d[st[tp - 1]], d[i] - d[st[tp - 1]]) >= 0)
        in[st[tp--]] = 0;
      st[++tp] = i;
      in[i] = 1;
    }
  st[tp + 1] = st[2];
  for (long long i = 1; i < tp; i++) {
    double v = check(d[st[i]], d[st[i + 1]], d[st[i + 2]]);
    if (v > mx) mx = v, res = i;
  }
  cout << d[st[res + 0]].x << ' ' << d[st[res + 0]].y << endl;
  cout << d[st[res + 1]].x << ' ' << d[st[res + 1]].y << endl;
  cout << d[st[res + 2]].x << ' ' << d[st[res + 2]].y << endl;
  return 0;
}
