#include <bits/stdc++.h>
using namespace std;
namespace IO {
const int sz = 1 << 15;
char inbuf[sz], outbuf[sz];
char *pinbuf = inbuf + sz;
char *poutbuf = outbuf;
inline char _getchar() {
  if (pinbuf == inbuf + sz) fread(inbuf, 1, sz, stdin), pinbuf = inbuf;
  return *(pinbuf++);
}
inline void _putchar(char x) {
  if (poutbuf == outbuf + sz) fwrite(outbuf, 1, sz, stdout), poutbuf = outbuf;
  *(poutbuf++) = x;
}
inline void flush() {
  if (poutbuf != outbuf)
    fwrite(outbuf, 1, poutbuf - outbuf, stdout), poutbuf = outbuf;
}
}  // namespace IO
inline int read() {
  int v = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    v = v * 10 + c - '0';
    c = getchar();
  }
  return v * f;
}
struct P {
  double x, y;
  P(double _x = 0.0, double _y = 0.0) { x = _x, y = _y; }
  P operator+(P p) { return P(x + p.x, y + p.y); }
  P operator-(P p) { return P(x - p.x, y - p.y); }
  double det(P p) { return x * p.y - y * p.x; }
  double dist() { return sqrt(x * x + y * y); }
  bool operator<(const P &p) const {
    if (x != p.x) return x < p.x;
    return y < p.y;
  }
};
vector<P> convex_hull(vector<P> A) {
  int n = A.size();
  sort(A.begin(), A.end());
  vector<P> ret;
  for (int i = 0; i < n; i++) {
    while (ret.size() >= 2 && (ret[ret.size() - 1] - ret[ret.size() - 2])
                                      .det(A[i] - ret[ret.size() - 1]) >= 0)
      ret.pop_back();
    ret.push_back(A[i]);
  }
  int S = ret.size();
  for (int i = n - 2; i >= 0; i--) {
    while (ret.size() > S && (ret[ret.size() - 1] - ret[ret.size() - 2])
                                     .det(A[i] - ret[ret.size() - 1]) >= 0)
      ret.pop_back();
    ret.push_back(A[i]);
  }
  ret.pop_back();
  return ret;
}
const int Maxn = 100005;
int n;
int main() {
  vector<P> X;
  n = read();
  for (int i = 1; i <= n; i++) {
    int x, y, v;
    x = read();
    y = read();
    v = read();
    if (x - v >= 0) {
      X.push_back(P(x - v, y));
    } else {
      X.push_back(P(0, y + v - x));
      X.push_back(P(0, y - v + x));
    }
    if (x + v <= 100000) {
      X.push_back(P(x + v, y));
    } else {
      X.push_back(P(100000, y + v - (100000 - x)));
      X.push_back(P(100000, y - v + (100000 - x)));
    }
    if (y - v >= 0) {
      X.push_back(P(x, y - v));
    } else {
      X.push_back(P(x + v - y, 0));
      X.push_back(P(x - v + y, 0));
    }
    if (y + v <= 100000) {
      X.push_back(P(x, y + v));
    } else {
      X.push_back(P(x + v - (100000 - y), 100000));
      X.push_back(P(x - v + (100000 - y), 100000));
    }
  }
  for (int i = 0; i < X.size(); i++) {
    if (X[i].x < 0) X[i].x = 0;
    if (X[i].x > 100000) X[i].x = 100000;
    if (X[i].y < 0) X[i].y = 0;
    if (X[i].y > 100000) X[i].y = 100000;
  }
  X = convex_hull(X);
  double Mx = 0.0;
  P a, b, c;
  for (int i = 0; i < X.size(); i++) {
    P A = X[i], B = X[(i + 1) % X.size()], C = X[(i + 2) % X.size()];
    double S = (A - B).det(C - B);
    if (S < 0) S = -S;
    double D = (A - B).dist() * (A - C).dist() * (B - C).dist();
    D /= S;
    D /= 2;
    if (D > Mx) {
      Mx = D;
      a = A, b = B, c = C;
    }
  }
  printf("%d %d\n", (int)a.x, (int)a.y);
  printf("%d %d\n", (int)b.x, (int)b.y);
  printf("%d %d\n", (int)c.x, (int)c.y);
}
