#include <bits/stdc++.h>
inline long long read() {
  long long res = 0, bo = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') bo = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    res = (res << 1) + (res << 3) + ch - '0';
    ch = getchar();
  }
  return bo * res;
}
template <typename T>
void read(T &x) {
  x = read();
}
template <typename T, typename... Argv>
void read(T &a, Argv &...argv) {
  read(a);
  read(argv...);
}
const int N = 100005, inf = 100000;
struct point {
  int x, y;
  point(int x = 0, int y = 0) : x(x), y(y) {}
  friend point operator-(const point &a, const point &b) {
    return point(a.x - b.x, a.y - b.y);
  }
  friend long long operator/(const point &a, const point &b) {
    return (long long)a.x * b.y - (long long)a.y * b.x;
  }
  long long len() { return (long long)x * x + (long long)y * y; }
  void print() { printf("%d %d\n", x, y); }
} p[N * 6], s[N * 6];
int top, n, tot;
void add(int x, int y) { p[++tot] = point(x, y); }
int main() {
  read(n);
  for (int i = 1; i <= n; ++i) {
    int x, y, v;
    read(x, y, v);
    if (x < v)
      add(0, std::max(y - v + x, 0)), add(0, std::min(y - x + v, inf));
    else
      add(x - v, y);
    if (y < v)
      add(std::max(x - v + y, 0), 0), add(std::min(x - y + v, inf), 0);
    else
      add(x, y - v);
    if (x + v > inf)
      add(inf, std::max(y - v + inf - x, 0)),
          add(inf, std::min(y + v + x - inf, inf));
    else
      add(x + v, y);
    if (y + v > inf)
      add(std::max(x - v + inf - y, 0), inf),
          add(std::min(x + v + y - inf, inf), inf);
    else
      add(x, y + v);
  }
  std::sort(p + 1, p + tot + 1, [](const point &a, const point &b) {
    return a.y == b.y ? a.x < b.x : a.y < b.y;
  });
  tot = std::unique(p + 1, p + tot + 1,
                    [](const point &a, const point &b) {
                      return a.x == b.x && a.y == b.y;
                    }) -
        p - 1;
  std::sort(p + 2, p + tot + 1, [](const point &a, const point &b) {
    long long res = (a - p[1]) / (b - p[1]);
    return res == 0 ? (a - p[1]).len() < (b - p[1]).len() : res > 0;
  });
  s[1] = p[1], s[top = 2] = p[2];
  for (int i = 3; i <= tot; ++i) {
    while (top > 1 && (p[i] - s[top - 1]) / (s[top] - s[top - 1]) >= 0) --top;
    s[++top] = p[i];
  }
  s[0] = s[top];
  s[top + 1] = s[1];
  int ans = 0;
  double Max = 0;
  for (int i = 1; i <= top; ++i) {
    point a = s[i - 1] - s[i], b = s[i + 1] - s[i], c = s[i + 1] - s[i - 1];
    double now = sqrt(a.len()) * sqrt(b.len()) * sqrt(c.len()) / (b / a * 2);
    if (now > Max) ans = i, Max = now;
  }
  s[ans - 1].print(), s[ans].print(), s[ans + 1].print();
  return 0;
}
