#include <bits/stdc++.h>
using namespace std;
const int maxn = 5000 + 5;
struct Point {
  int x, y;
  Point(int x = 0, int y = 0) : x(x), y(y) {}
} p[maxn], ch[maxn], pp[3];
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);
}
bool operator<(const Point &a, const Point &b) {
  return a.x != b.x ? a.x < b.x : a.y < b.y;
}
long long Cross(const Point &a, const Point &b) {
  return (long long)a.x * b.y - (long long)a.y * b.x;
}
long long Area2(const Point &a, const Point &b, const Point &c) {
  return Cross(b - a, c - a);
}
int ConvexHull(int n) {
  sort(p, p + n);
  int m = 0;
  for (int i = 0; i < n; ++i) {
    while (m > 1 && Cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) <= 0) --m;
    ch[m++] = p[i];
  }
  int k = m;
  for (int i = n - 2; i >= 0; --i) {
    while (m > k && Cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) <= 0) --m;
    ch[m++] = p[i];
  }
  if (n > 1) --m;
  return m;
}
int main() {
  int n, s;
  scanf("%d%d", &n, &s);
  for (int i = 0; i < n; ++i) scanf("%d%d", &p[i].x, &p[i].y);
  n = ConvexHull(n);
  for (int i = 0; i < n; ++i) {
    for (int j = (i + 1) % n, k = (j + 1) % n; j != i; j = (j + 1) % n) {
      while (k != i) {
        int l = (k + 1) % n;
        if (abs(Area2(ch[i], ch[j], ch[k])) >= abs(Area2(ch[i], ch[j], ch[l])))
          break;
        k = (k + 1) % n;
      }
      if (abs(Area2(ch[i], ch[j], ch[k])) > abs(Area2(pp[0], pp[1], pp[2]))) {
        pp[0] = ch[i];
        pp[1] = ch[j];
        pp[2] = ch[k];
      }
    }
  }
  for (int i = 0; i < 3; ++i) {
    Point q;
    for (int j = (i + 1) % 3; j != i; j = (j + 1) % 3) {
      q = q + pp[j] - pp[i];
    }
    q = q + pp[i];
    printf("%d %d\n", q.x, q.y);
  }
  return 0;
}
