#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
struct point {
  int x, y;
  point() {}
  point(int _x, int _y) : x(_x), y(_y) {}
  inline friend point operator-(const point &a, const point &b) {
    return point(a.x - b.x, a.y - b.y);
  }
  inline friend point operator+(const point &a, const point &b) {
    return point(a.x + b.x, a.y + b.y);
  }
  inline friend long long operator*(const point &a, const point &b) {
    return 1ll * a.x * b.y - 1ll * a.y * b.x;
  }
  inline long long dis() { return 1ll * x * x + 1ll * y * y; }
} p[N], A, B, C;
int n, top;
long long S;
inline bool cmp(const point &a, const point &b) {
  long long res = (a - p[1]) * (b - p[1]);
  if (res) return res > 0;
  return (a - p[1]).dis() < (b - p[1]).dis();
}
inline long long area(int i, int j, int k) {
  return abs((p[j] - p[i]) * (p[k] - p[i]));
}
void graham() {
  for (int i = 2; i <= n; i++)
    if ((p[i].x < p[1].x) || (p[i].x == p[1].x && p[i].y < p[1].y))
      swap(p[1], p[i]);
  sort(p + 2, p + n + 1, cmp), top = 1;
  for (int i = 2; i <= n; i++) {
    while (top > 1 && (p[top - 1] - p[i]) * (p[top] - p[i]) < 0) top--;
    p[++top] = p[i];
  }
  n = top;
}
int main() {
  scanf("%d%lld", &n, &S);
  for (int i = 1; i <= n; i++) scanf("%d%d", &p[i].x, &p[i].y);
  graham();
  S = 0;
  point a, b, c;
  for (int i = 1; i <= n - 2; i++)
    for (int j = i + 1, k = j + 1; j <= n - 1; j++) {
      while (k <= n && area(i, j, k + 1) >= area(i, j, k)) k++;
      if (area(i, j, k) > S) S = area(i, j, k), a = p[i], b = p[j], c = p[k];
    }
  A = a + (b - c), B = b + (c - a), C = c + (a - b);
  printf("%d %d\n%d %d\n%d %d\n", A.x, A.y, B.x, B.y, C.x, C.y);
  return 0;
}
