#include <bits/stdc++.h>
using namespace std;
const int Q = 1e6 + 5;
struct vec {
  long long x, y;
  vec() {}
  vec(long long a, long long b) { x = a, y = b; }
  void R() { scanf("%lld%lld", &x, &y); }
} a[Q], st[Q];
vec operator+(vec a, vec b) { return vec(a.x + b.x, a.y + b.y); }
vec operator-(vec a, vec b) { return vec(a.x - b.x, a.y - b.y); }
long long operator*(vec a, vec b) { return a.x * b.x + a.y * b.y; }
long long operator^(vec a, vec b) { return a.x * b.y - a.y * b.x; }
bool C1(vec a, vec b) { return fabs(a.x - b.x) < 1e-5 ? a.y < b.y : a.x < b.x; }
void Graham(vec a[], int &n) {
  sort(a + 1, a + n + 1, C1);
  int owo = n;
  n = 0;
  for (int i = 1; i <= owo; i++) {
    while (n > 1 && ((a[i] - st[n - 1]) ^ (st[n] - st[n - 1])) < 1e-9) --n;
    st[++n] = a[i];
  }
  int lim = n;
  for (int i = owo - 1; i; --i) {
    while (n > lim && ((a[i] - st[n - 1]) ^ (st[n] - st[n - 1])) < 1e-9) --n;
    st[++n] = a[i];
  }
  --n;
  for (int i = 1; i <= n; i++) a[i] = st[i];
}
void W(vec p) { printf("%lld %lld\n", p.x, p.y); }
int main() {
  int n;
  long long UseLess;
  scanf("%d%lld", &n, &UseLess);
  for (int i = 1; i <= n; i++) a[i].R();
  Graham(a, n);
  long long als = -1e18;
  vec p1, p2, p3;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1, k = j + 1; j < n; j++) {
      while (k + 1 <= n && ((a[k + 1] - a[i]) ^ (a[j] - a[i])) >
                               ((a[k] - a[i]) ^ (a[j] - a[i])))
        ++k;
      long long va = ((a[k] - a[i]) ^ (a[j] - a[i]));
      if (va > als) als = va, p1 = a[i], p2 = a[j], p3 = a[k];
    }
  W(p1 + p2 - p3), W(p1 + p3 - p2), W(p2 + p3 - p1);
  return 0;
}
