#include <bits/stdc++.h>
using namespace std;
const int N = 5050;
int sign(long long x) {
  if (x > 0) x = 1;
  if (x < 0) x = -1;
  return x;
}
struct P {
  int x, y;
  P() {}
  P(int a, int b) { x = a, y = b; }
  P operator+(const P &c) const { return P(x + c.x, y + c.y); }
  P operator-(const P &c) const { return P(x - c.x, y - c.y); }
  bool operator<(const P &c) const {
    if (x != c.x) return x < c.x;
    return y < c.y;
  }
  void print() { cout << x << " " << y << "\n"; }
};
inline long long cross(P a, P b) { return 1ll * a.x * b.y - 1ll * b.x * a.y; }
int convexhull(P *p, int n, P *ch) {
  sort(p, p + n);
  int m = 0;
  for (int i = (0); i < (n); i++) {
    while (m > 1 && sign(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 && sign(cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2])) <= 0)
      --m;
    ch[m++] = p[i];
  }
  if (n > 1) --m;
  return m;
}
inline long long area(P a, P b, P c) { return abs(cross(b - a, c - a)); }
void maxAreaTri(P *p, int n, P &a, P &b, P &c) {
  int i = 0, j = 1, k = 2;
  a = p[i], b = p[j], c = p[k];
  long long res = area(a, b, c), cur = res, tmp;
  do {
    while (1) {
      while (cur <= (tmp = area(p[i], p[j], p[(k + 1) % n])))
        (++k) %= n, cur = tmp;
      if (cur <= (tmp = area(p[i], p[(j + 1) % n], p[k])))
        (++j) %= n, cur = tmp;
      else
        break;
    }
    if (cur > res) a = p[i], b = p[j], c = p[k], res = cur;
    (++i) %= n;
    if (i == j) (++j) %= n;
    if (j == k) (++k) %= n;
    cur = area(p[i], p[j], p[k]);
  } while (i);
}
int n, m;
long long s;
P p[N], ch[N];
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> s;
  for (int i = (0); i < (n); i++) cin >> p[i].x >> p[i].y;
  m = convexhull(p, n, ch);
  P a, b, c;
  maxAreaTri(ch, m, a, b, c);
  (a + b - c).print();
  (a + c - b).print();
  (b + c - a).print();
  return 0;
}
