#include <bits/stdc++.h>
using namespace std;
struct node {
  long long x, y;
  node(long long X = 0, long long Y = 0) : x(X), y(Y) {}
  bool operator<(const node a) const { return x == a.x ? y < a.y : x < a.x; }
  node operator+(node a) { return node(x + a.x, y + a.y); }
  node operator-(node a) { return node(x - a.x, y - a.y); }
  long long operator*(node a) { return x * a.y - y * a.x; }
} p[5010], q[5010], a, b, c;
long long cross(node x, node o, node y) { return (x - o) * (y - o); }
int t;
void print(node a) { printf("%lld %lld\n", a.x, a.y); }
int main() {
  int n;
  long long s;
  scanf("%d%lld", &n, &s);
  for (int i = 1; i <= n; i++) scanf("%lld%lld", &p[i].x, &p[i].y);
  sort(p + 1, p + n + 1);
  for (int i = 1; i <= n; i++) {
    for (; t > 1 && cross(q[t], q[t - 1], p[i]) <= 0; t--)
      ;
    q[++t] = p[i];
  }
  int s0 = t;
  for (int i = n - 1; i >= 1; i--) {
    for (; t > s0 && cross(q[t], q[t - 1], p[i]) <= 0; t--)
      ;
    q[++t] = p[i];
  }
  --t;
  long long sm = 0;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1, k = j % t + 1; j <= t && k != i; j++) {
      for (; cross(q[j], q[i], q[k]) < cross(q[j], q[i], q[k + 1]);
           k = k % t + 1)
        ;
      if (k != i && k != j && cross(q[j], q[i], q[k]) > sm)
        sm = cross(q[j], q[i], q[k]), a = q[i], b = q[j], c = q[k];
    }
  print(a - c + b), print(b - a + c), print(c - b + a);
  return 0;
}
