#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, MAXV = 1e5;
struct node {
  int x, y;
  bool operator==(const node &a) const { return x == a.x && y == a.y; }
  node operator-(const node &a) const { return node{x - a.x, y - a.y}; }
  long long operator^(const node &a) const {
    return 0ll + 1ll * x * a.y - 1ll * a.x * y;
  }
  long long len_2() { return 0ll + 1ll * x * x + 1ll * y * y; }
} p[N * 6], s[N * 6];
int n, m, top;
bool cmp1(node x, node y) { return x.y == y.y ? x.x < y.x : x.y < y.y; }
bool cmp2(node x, node y) {
  node p1 = x - p[1], p2 = y - p[1];
  long long check = p1 ^ p2;
  return check == 0 ? p1.len_2() < p2.len_2() : check > 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int x, y, v;
    scanf("%d%d%d", &x, &y, &v);
    if (x >= v)
      p[++m] = node{x - v, y};
    else
      p[++m] = node{0, min(y + (v - x), MAXV)},
      p[++m] = node{0, max(y - (v - x), 0)};
    if (y >= v)
      p[++m] = node{x, y - v};
    else
      p[++m] = node{min(x + (v - y), MAXV), 0},
      p[++m] = node{max(x - (v - y), 0), 0};
    if (x + v <= MAXV)
      p[++m] = node{x + v, y};
    else
      p[++m] = node{MAXV, min(y + (x + v - MAXV), MAXV)},
      p[++m] = node{MAXV, max(y - (x + v - MAXV), 0)};
    if (y + v <= MAXV)
      p[++m] = node{x, y + v};
    else
      p[++m] = node{min(x + (y + v - MAXV), MAXV), MAXV},
      p[++m] = node{max(x - (y + v - MAXV), 0), MAXV};
  }
  sort(p + 1, p + m + 1, cmp1);
  m = unique(p + 1, p + m + 1) - p - 1;
  sort(p + 2, p + m + 1, cmp2);
  s[++top] = p[1], s[++top] = p[2];
  for (int i = 3; i <= m; i++) {
    while (top >= 2 && ((p[i] - s[top - 1]) ^ (s[top] - s[top - 1])) >= 0)
      --top;
    s[++top] = p[i];
  }
  double ans1 = 0;
  int ans2 = -1;
  for (int i = 1; i <= top; i++) {
    node op1 = s[(i - 2 + top) % top + 1];
    node op2 = s[i];
    node op3 = s[i % top + 1];
    node x = op1 - op2, y = op3 - op2, z = op3 - op1;
    double sin__ =
        (1.0 * (y ^ x)) / (sqrt(1.0 * x.len_2()) * sqrt(1.0 * y.len_2()));
    double R = sqrt(1.0 * z.len_2()) / (sin__ * 2.0);
    if (R > ans1) ans2 = i, ans1 = R;
  }
  node op1 = s[(ans2 - 2 + top) % top + 1];
  node op2 = s[ans2];
  node op3 = s[ans2 % top + 1];
  printf("%d %d\n%d %d\n%d %d", op1.x, op1.y, op2.x, op2.y, op3.x, op3.y);
  return 0;
}
