#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fll;
const int MAXN = 5010;
struct Point {
  long long x, y;
  Point() {}
  Point(long long xx, long long yy) {
    x = xx;
    y = yy;
  }
};
Point operator+(const Point &a, const Point &b) {
  return Point(a.x + b.x, a.y + b.y);
}
Point operator-(const Point &a, const Point &b) {
  return Point(a.x - b.x, a.y - b.y);
}
long long operator*(const Point &a, const Point &b) {
  return a.x * b.x + a.y * b.y;
}
long long operator^(const Point &a, const Point &b) {
  return a.x * b.y - a.y * b.x;
}
vector<Point> convexHull(vector<Point> poly) {
  sort(poly.begin(), poly.end(), [](const Point &a, const Point &b) {
    if (a.x == b.x) return a.y < b.y;
    return a.x < b.x;
  });
  vector<Point> top, bot;
  int tlen = 0, blen = 0;
  for (const Point &p : poly) {
    while (tlen > 1 &&
           ((top[tlen - 2] - top[tlen - 1]) ^ (p - top[tlen - 1])) <= 0) {
      tlen--;
      top.pop_back();
    }
    while (blen > 1 &&
           ((p - bot[blen - 1]) ^ (bot[blen - 2] - bot[blen - 1])) <= 0) {
      blen--;
      bot.pop_back();
    }
    top.push_back(p);
    bot.push_back(p);
    tlen++;
    blen++;
  }
  for (int i = blen - 2; i > 0; i--) top.push_back(bot[i]);
  return top;
}
int main() {
  int n;
  long long s;
  cin >> n >> s;
  vector<Point> vp;
  for (int i = 0; i < n; i++) {
    Point p;
    cin >> p.x >> p.y;
    vp.push_back(p);
  }
  vector<Point> hull = convexHull(vp);
  long long max_area = 0;
  n = hull.size();
  Point p1, p2, p3;
  for (int i = 0; i < n; i++) {
    int r = (i + 1) % n;
    for (int l = r; l != i; l = (l + 1) % n) {
      Point iu = hull[r] - hull[i];
      Point iv = hull[l] - hull[i];
      long long cur_area = (iu ^ iv);
      while ((r + 1) % n != i) {
        Point u = hull[(r + 1) % n] - hull[i];
        Point v = hull[l] - hull[i];
        if ((u ^ v) > cur_area) {
          cur_area = (u ^ v);
          r = (r + 1) % n;
        } else
          break;
      }
      if (cur_area > max_area) {
        max_area = cur_area;
        p1 = hull[i];
        p2 = hull[l];
        p3 = hull[r];
      }
      if (l == r) r = (r + 1) % n;
    }
  }
  assert(max_area > 0);
  Point pa(p1.x - p2.x + p3.x, p1.y - p2.y + p3.y);
  Point pb(2 * p1.x - pa.x, 2 * p1.y - pa.y);
  Point pc(2 * p2.x - pb.x, 2 * p2.y - pb.y);
  cout << pa.x << " " << pa.y << endl;
  cout << pb.x << " " << pb.y << endl;
  cout << pc.x << " " << pc.y << endl;
  return 0;
}
