#include <bits/stdc++.h>
using namespace std;
struct pt {
  int x, y;
  pt(int x_ = 0, int y_ = 0) { x = x_, y = y_; }
  bool operator<(const pt &p) const {
    if (y != p.y) return y < p.y;
    return x < p.x;
  }
  pt operator+(const pt &p) const { return pt(x + p.x, y + p.y); }
  pt operator-(const pt &p) const { return pt(x - p.x, y - p.y); }
};
long long cross(pt a, pt b) { return a.x * 1LL * b.y - a.y * 1LL * b.x; }
vector<pt> convexHull(vector<pt> &p) {
  sort(p.begin(), p.end());
  int n = p.size();
  vector<pt> h(2 * n);
  int k = 0;
  for (int i = 0; i < n; i++) {
    while (k >= 2 && cross(h[k - 1] - h[k - 2], p[i] - h[k - 2]) <= 0) k--;
    h[k++] = p[i];
  }
  for (int i = n - 2, t = k + 1; i >= 0; i--) {
    while (k >= t && cross(h[k - 1] - h[k - 2], p[i] - h[k - 2]) <= 0) k--;
    h[k++] = p[i];
  }
  h.resize(k - 1);
  return h;
}
int n;
long long s;
vector<pt> p;
long long getArea(pt a, pt b, pt c) { return cross(b - a, c - a); }
int main() {
  scanf("%d%I64d", &n, &s);
  p.reserve(n);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    p.push_back(pt(x, y));
  }
  auto r = convexHull(p);
  int w = (int)r.size();
  long long best = 0;
  pt a, b, c;
  for (int i = 0; i < w; i++) {
    int j = (i + 1) % w;
    int k = (i + 2) % w;
    while (k != i) {
      long long area = getArea(r[i], r[j], r[k]);
      long long narea = getArea(r[i], r[j], r[(k + 1) % w]);
      if (area > best) {
        best = area;
        a = r[i];
        b = r[j];
        c = r[k];
      }
      if (area <= narea)
        k = (k + 1) % w;
      else
        j = (j + 1) % w;
    }
  }
  pt p1 = a + b - c;
  pt p2 = a + c - b;
  pt p3 = b + c - a;
  printf("%d %d\n%d %d\n%d %d\n", p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
  return 0;
}
