#include <bits/stdc++.h>
const long long N = 1e5 + 5;
using namespace std;
struct point {
  long long x, y;
} p[N];
vector<point> mv;
bool cmp(point a, point b) { return (a.x < b.x || (a.x == b.x && a.y < b.y)); }
bool ccw(point o, point a, point b) {
  return ((a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y) <= 0);
}
long long area(point A, point B, point C) {
  return abs((B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y));
}
long long n, S, A, B, C;
void convexhull() {
  int k = 0;
  mv.assign(2 * n, {});
  sort(p + 1, p + 1 + n, cmp);
  for (int i = 1; i <= n; i++) {
    while (k >= 2 && ccw(mv[k - 2], mv[k - 1], p[i])) k--;
    mv[k++] = p[i];
  }
  for (int i = n - 1, t = k + 1; i >= 1; i--) {
    while (k >= t && ccw(mv[k - 2], mv[k - 1], p[i])) k--;
    mv[k++] = p[i];
  }
  mv.resize(k - 1);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> S;
  for (long long i = 1; i <= n; i++) cin >> p[i].x >> p[i].y;
  convexhull();
  for (long long i = 0; i < (int)mv.size(); i++) {
    long long cnt = i + 1;
    for (long long j = i + 1; j < (int)mv.size(); j++) {
      while (cnt <= (int)mv.size() &&
             area(mv[i], mv[j], mv[cnt]) <= area(mv[i], mv[j], mv[cnt + 1]))
        cnt++;
      if (area(mv[A], mv[B], mv[C]) < area(mv[i], mv[j], mv[cnt]))
        A = i, B = j, C = cnt;
    }
  }
  cout << mv[A].x + mv[B].x - mv[C].x << " " << mv[A].y + mv[B].y - mv[C].y
       << "\n";
  cout << mv[B].x + mv[C].x - mv[A].x << " " << mv[B].y + mv[C].y - mv[A].y
       << "\n";
  cout << mv[C].x + mv[A].x - mv[B].x << " " << mv[C].y + mv[A].y - mv[B].y
       << "\n";
}
