#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void maximize(T &a, T b) {
  if (b > a) a = b;
}
template <typename T>
inline void minimize(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
inline void xReplace(T v, T &mx, T &sx) {
  if (v > mx)
    sx = mx, mx = v;
  else if (v > sx)
    sx = v;
}
template <typename T>
inline void nReplace(T v, T &mn, T &sn) {
  if (v < mn)
    sn = mn, mn = v;
  else if (v < sn)
    sn = v;
}
inline long long fr() {
  long long ret = 0, sym = 1;
  int c = 0;
  while (!isdigit(c)) sym = c == '-' ? -1 : 1, c = getchar();
  while (isdigit(c)) ret = ret * 10 + c - '0', c = getchar();
  return ret * sym;
}
const int maxn = 1e5 + 5;
const int bord = 1e5;
const long double eps = 1e-8L;
const long double inf = 1e18L;
pair<int, int> operator-(pair<int, int> a, pair<int, int> b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
long long operator/(pair<int, int> a, pair<int, int> b) {
  return 1ll * a.first * b.second - 1ll * b.first * a.second;
}
inline long double len(pair<int, int> a) {
  return sqrt(1ll * a.first * a.first + 1ll * a.second * a.second);
}
int n, irc[114514];
vector<pair<int, int> > dt_pt;
pair<int, int> t_q[maxn * 8];
int t_h, t_t;
vector<pair<int, int> > pr_pal;
long double dt_mxR = -inf;
pair<pair<int, int>, pair<pair<int, int>, pair<int, int> > > dt_ans;
inline void adjust(int x, int y, int v) {
  if (y + v <= bord)
    dt_pt.push_back(make_pair(x, y + v));
  else
    dt_pt.push_back(make_pair(max(0, x - y - v + bord), bord)),
        dt_pt.push_back(make_pair(min(bord, x + y + v - bord), bord));
  if (y - v >= 0)
    dt_pt.push_back(make_pair(x, y - v));
  else
    dt_pt.push_back(make_pair(max(0, x + y - v), 0)),
        dt_pt.push_back(make_pair(min(bord, x - y + v), 0));
  if (x + v <= bord)
    dt_pt.push_back(make_pair(x + v, y));
  else
    dt_pt.push_back(make_pair(bord, max(0, -x + y - v + bord))),
        dt_pt.push_back(make_pair(bord, min(bord, x + y + v - bord)));
  if (x - v >= 0)
    dt_pt.push_back(make_pair(x - v, y));
  else
    dt_pt.push_back(make_pair(0, max(0, x + y - v))),
        dt_pt.push_back(make_pair(0, min(bord, -x + y + v)));
}
inline bool slless(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
  return 1ll * (b.second - a.second) * (c.first - b.first) <=
         1ll * (c.second - b.second) * (b.first - a.first);
}
inline void andrew1() {
  t_q[t_h = 0] = dt_pt[0], t_t = 1;
  for (int i = 1; i <= ((int)dt_pt.size() - 1); ++i) {
    if (dt_pt[i] == dt_pt[i - 1]) continue;
    while (t_t > t_h + 1 && slless(t_q[t_t - 2], t_q[t_t - 1], dt_pt[i])) --t_t;
    t_q[t_t++] = dt_pt[i];
  }
  for (int i = (t_h); i <= (t_t - 1); ++i) pr_pal.push_back(t_q[i]);
}
inline void andrew2() {
  t_q[t_h = 0] = dt_pt[0], t_t = 1;
  for (int i = 1; i <= ((int)dt_pt.size() - 1); ++i) {
    if (dt_pt[i] == dt_pt[i - 1]) continue;
    while (t_t > t_h + 1 && slless(dt_pt[i], t_q[t_t - 1], t_q[t_t - 2])) --t_t;
    t_q[t_t++] = dt_pt[i];
  }
  for (int i = (t_t - 2); i >= (t_h + 1); --i) pr_pal.push_back(t_q[i]);
}
inline void solve() {
  pr_pal.push_back(pr_pal[0]), pr_pal.push_back(pr_pal[1]);
  for (int i = (2); i <= ((int)pr_pal.size() - 1); ++i) {
    pair<int, int> a = pr_pal[i - 2], b = pr_pal[i - 1], c = pr_pal[i];
    pair<int, int> x = b - a, y = c - b, z = a - c;
    long double R = len(x) * len(y) * len(z) / (fabs(y / x) * 4);
    if (R > dt_mxR) dt_mxR = R, dt_ans = make_pair(a, make_pair(b, c));
  }
}
int main() {
  n = fr();
  for (int i = 1; i <= (n); ++i) {
    for (int j = 1; j <= (3); ++j) irc[j] = fr();
    adjust(irc[1], irc[2], irc[3]);
  }
  sort(dt_pt.begin(), dt_pt.end());
  andrew1();
  andrew2();
  solve();
  printf("%d %d\n", dt_ans.first.first, dt_ans.first.second);
  printf("%d %d\n", dt_ans.second.first.first, dt_ans.second.first.second);
  printf("%d %d\n", dt_ans.second.second.first, dt_ans.second.second.second);
  return 0;
}
