#include <bits/stdc++.h>
using namespace std;
unsigned int g_seed = 1000000021;
const unsigned int FASTRAND_MAX = 0x7FFF;
inline int fastrand() {
  g_seed = (214013 * g_seed + 2531011);
  return (g_seed >> 16) & 0x7FFF;
}
complex<long long> tri[3], ans[3];
inline long long area2(complex<long long> a, complex<long long> b,
                       complex<long long> c) {
  return abs(imag(conj(b - a) * (c - a)));
}
inline void build_ans() {
  ans[2] = tri[0] + tri[1] - tri[2];
  ans[1] = tri[0] + tri[2] - tri[1];
  ans[0] = tri[1] + tri[2] - tri[0];
}
inline bool ans_contains(complex<long long> p) {
  return area2(ans[0], ans[1], ans[2]) == area2(ans[0], ans[1], p) +
                                              area2(ans[0], p, ans[2]) +
                                              area2(p, ans[1], ans[2]);
}
complex<long long> pts[5010];
int main() {
  int n;
  long long S;
  scanf("%d", &n);
  cin >> S;
  for (int i = 0; i < n; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    pts[i] = complex<long long>(x, y);
  }
  for (int i = n - 1; i > 0; --i) swap(pts[i], pts[fastrand() % (i + 1)]);
  tri[0] = pts[0];
  for (int i = 1; i < n; ++i)
    if (pts[i] != tri[0]) {
      tri[1] = pts[i];
      break;
    }
  for (int i = 1; i < n; ++i) {
    if (area2(tri[0], tri[1], pts[i]) != 0LL) {
      tri[2] = pts[i];
      break;
    }
  }
  build_ans();
  for (int i = 0, okcnt = 0; okcnt <= n + 2; ++okcnt, i = (i + 1) % n) {
    if (!ans_contains(pts[i])) {
      long long v0 = area2(tri[1], tri[2], pts[i]);
      long long v1 = area2(tri[0], tri[2], pts[i]);
      long long v2 = area2(tri[0], tri[1], pts[i]);
      if (v0 >= v1 && v0 >= v2)
        tri[0] = pts[i];
      else if (v1 >= v2)
        tri[1] = pts[i];
      else
        tri[2] = pts[i];
      okcnt = 0;
      build_ans();
    }
  }
  for (int i = 0; i < 3; ++i)
    printf("%d %d\n", (int)real(ans[i]), (int)imag(ans[i]));
  return 0;
}
