#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch - '0' < 0 || ch - '0' > 9) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch - '0' >= 0 && ch - '0' <= 9) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int N = 100000;
struct P {
  long long x, y;
} p[100010 * 8], q[100], s[100010 * 8];
P operator+(P a, P b) { return (P){a.x + b.x, a.y + b.y}; }
P operator-(P a, P b) { return (P){a.x - b.x, a.y - b.y}; }
long long operator*(P a, P b) { return a.x * b.y - a.y * b.x; }
long long operator^(P a, P b) { return a.x * b.x + a.y * b.y; }
P operator*(P a, long long b) { return (P){a.x * b, a.y * b}; }
P operator/(P a, long long b) { return (P){a.x / b, a.y / b}; }
P lim[4][2] = {(P){0, 0}, (P){0, N}, (P){0, N}, (P){N, N},
               (P){N, N}, (P){N, 0}, (P){N, 0}, (P){0, 0}};
int n, top, cntx, cnt;
void work(P u, P v) {
  for (int i = 0; i < 4; i++) {
    long long s1 = (v - u) * (lim[i][0] - u), s2 = (lim[i][1] - u) * (v - u);
    if (s1 + s2 == 0) continue;
    q[cntx++] = (lim[i][0] * s2 + lim[i][1] * s1) / (s1 + s2);
  }
}
double dis(P a, P b) {
  return sqrt((double)(a.x - b.x) * (a.x - b.x) +
              (double)(a.y - b.y) * (a.y - b.y));
}
bool cmp(P a, P b) {
  long long d = (a - p[1]) * (b - p[1]);
  return (d > 0) || (d == 0 && dis(p[1], a) < dis(p[1], b));
}
void Convex_Hull() {
  int pos = 1;
  for (int i = 2; i <= cnt; i++)
    if (p[i].x < p[pos].x || (p[i].x == p[pos].x && p[i].y < p[pos].y)) pos = i;
  swap(p[1], p[pos]);
  sort(p + 2, p + cnt + 1, cmp);
  for (int i = 1; i <= cnt; i++) {
    while (top > 2 && (p[i] - s[top - 1]) * (s[top] - s[top - 1]) >= 0) top--;
    s[++top] = p[i];
  }
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    int x = read(), y = read(), v = read();
    q[0] = (P){x, y - v};
    q[1] = (P){x - v, y};
    q[2] = (P){x, y + v};
    q[3] = (P){x + v, y};
    q[4] = (P){0, 0};
    q[5] = (P){0, N};
    q[6] = (P){N, 0};
    q[7] = (P){N, N};
    cntx = 8;
    for (int i = 0; i < 4; i++) work(q[i], q[(i + 1) % 4]);
    for (int i = 0; i < cntx; i++) {
      if (abs(x - q[i].x) + abs(y - q[i].y) <= v && q[i].x >= 0 &&
          q[i].x <= N && q[i].y >= 0 && q[i].y <= N)
        p[++cnt] = q[i];
    }
  }
  Convex_Hull();
  P ans1, ans2, ans3;
  double ans = 0;
  for (int i = 1; i <= top; i++) {
    int a = i, b = a % top + 1, c = b % top + 1;
    if ((s[b] - s[a]) * (s[c] - s[a]) == 0) continue;
    double r = ((double)(dis(s[a], s[b]) * dis(s[b], s[c]) * dis(s[c], s[a])) /
                (double)abs((s[b] - s[a]) * (s[c] - s[a]) * 2));
    if (r > ans) ans = r, ans1 = s[a], ans2 = s[b], ans3 = s[c];
  }
  cout << ans1.x << " " << ans1.y << endl
       << ans2.x << " " << ans2.y << endl
       << ans3.x << " " << ans3.y << endl;
  return 0;
}
