#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  Point(long long x = 0, long long y = 0) : x(x), y(y) {}
  Point operator-(const Point &t) const { return Point(x - t.x, y - t.y); }
  long long operator*(const Point &t) const { return x * t.y - y * t.x; }
  double dis() { return sqrt(x * x + y * y); }
};
struct Answer {
  Point A, B, C;
  double r;
  bool operator<(const Answer &t) const { return r < t.r; }
  Answer() { A = B = C = Point(0, 0), r = 0; }
  Answer(Point A, Point B, Point C) : A(A), B(B), C(C) {
    double a = (B - C).dis(), b = (A - C).dis(), c = (A - B).dis();
    double cosC = (a * a + b * b - c * c) / (2 * a * b),
           sinC = sqrt(1 - cosC * cosC);
    if (fabs(sinC) < 1e-10)
      r = -1;
    else
      r = c / (2 * sinC);
  }
  void output() {
    printf("%lld %lld\n", A.x, A.y);
    printf("%lld %lld\n", B.x, B.y);
    printf("%lld %lld\n", C.x, C.y);
  }
};
const int N = 100010;
Answer getCir(vector<Point> hull);
vector<Point> getHull(vector<Point> point);
void addPoint(int x, int y, int v, vector<Point> &point);
int main() {
  vector<Point> point;
  int n;
  for (int i = scanf("%d", &n), x, y, v; i <= n; ++i) {
    scanf("%d %d %d", &x, &y, &v);
    addPoint(x, y, v, point);
  }
  getCir(getHull(point)).output();
  return 0;
}
Answer getCir(vector<Point> hull) {
  Answer ans;
  for (int i = 0, sz = hull.size(); i < sz; ++i) {
    Point x = hull[i], y = hull[(i + 1) % sz], z = hull[(i + 2) % sz];
    ans = max(ans, Answer(x, y, z));
  }
  return ans;
}
vector<Point> getHull(vector<Point> point) {
  sort(point.begin(), point.end(), [&](Point a, Point b) {
    if (a.x != b.x) return a.x < b.x;
    return a.y < b.y;
  });
  point.erase(
      unique(point.begin(), point.end(),
             [&](Point a, Point b) { return a.x == b.x && a.y == b.y; }),
      point.end());
  if (point.size() < 3) throw "Invalid";
  sort(point.begin() + 1, point.end(), [&](Point a, Point b) {
    Point A = a - point[0], B = b - point[0];
    if (A * B == 0) return A.dis() < B.dis();
    return A * B < 0;
  });
  vector<Point> hull;
  hull.push_back(point[0]);
  for (int i = 1; i < point.size(); ++i) {
    Point &p = point[i];
    while (hull.size() > 1 &&
           (p - hull.back()) * (hull.back() - hull[hull.size() - 2]) <= 0)
      hull.pop_back();
    hull.push_back(p);
  }
  return hull;
}
void addPoint(int x, int y, int v, vector<Point> &point) {
  int lim = 1e5, t;
  if (x + v <= lim)
    point.emplace_back(x + v, y);
  else {
    t = v - lim + x;
    point.emplace_back(lim, min(y + t, lim));
    point.emplace_back(lim, max(y - t, 0));
  }
  if (x - v >= 0)
    point.emplace_back(x - v, y);
  else {
    t = v - x;
    point.emplace_back(0, min(y + t, lim));
    point.emplace_back(0, max(y - t, 0));
  }
  if (y + v <= lim)
    point.emplace_back(x, y + v);
  else {
    t = v - lim + y;
    point.emplace_back(min(x + t, lim), lim);
    point.emplace_back(max(x - t, 0), lim);
  }
  if (y - v >= 0)
    point.emplace_back(x, y - v);
  else {
    t = v - y;
    point.emplace_back(min(x + t, lim), 0);
    point.emplace_back(max(x - t, 0), 0);
  }
}
