#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
const long long maxn = 1e5 + 5;
const double eps = 1e-7;
const double PI = acos(-1);
void std_quick_io() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
struct point {
  double x, y;
  point() {}
  point(double x_, double y_) : x(x_), y(y_) {}
  point operator-(point b) { return point(x - b.x, y - b.y); }
  point operator*(double b) { return point(b * x, b * y); }
  point operator+(point b) { return point(x + b.x, y + b.y); }
};
double cross(point a, point b) { return a.x * b.y - a.y * b.x; }
bool cmp1(point a, point b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
vector<point> andrew(vector<point> p) {
  sort(p.begin(), p.end(), cmp1);
  int n = (int)p.size();
  vector<point> ch(2 * n);
  int top = 0;
  for (int i = 0; i < n; i++) {
    while ((top > 1) &&
           (cross(ch[top - 1] - ch[top - 2], p[i] - ch[top - 2]) <= 0))
      top--;
    ch[top++] = p[i];
  }
  int tmp = top;
  for (int i = n - 2; i >= 0; i--) {
    while ((top > tmp) &&
           (cross(ch[top - 1] - ch[top - 2], p[i] - ch[top - 2]) <= 0))
      top--;
    ch[top++] = p[i];
  }
  if (n > 1) top--;
  ch.resize(top);
  return ch;
}
pair<vector<point>, double> max_sj(vector<point> p) {
  vector<point> q(3);
  double ans = 0;
  int n = (int)p.size();
  for (int i = 0; i < n; i++) {
    int k = (i + 2) % n;
    for (int j = i + 1; j < n; j++) {
      while (cross(p[i] - p[j], p[i] - p[k]) <
             cross(p[i] - p[j], p[i] - p[(k + 1) % n])) {
        k = (k + 1) % n;
      }
      if (fabs(cross(p[i] - p[j], p[i] - p[k])) > ans) {
        ans = fabs(cross(p[i] - p[j], p[i] - p[k]));
        q[0] = p[i];
        q[1] = p[j];
        q[2] = p[k];
      }
    }
  }
  return make_pair(q, 0.5 * ans);
}
int main() {
  int n;
  long long s;
  scanf("%d%lld", &n, &s);
  vector<point> res(n);
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &res[i].x, &res[i].y);
  }
  vector<point> l = andrew(res);
  vector<point> ans = max_sj(l).first;
  vector<point> k(3);
  k[0] = ans[0] + (ans[1] - ans[2]);
  k[1] = ans[1] + (ans[2] - ans[0]);
  k[2] = ans[2] + (ans[0] - ans[1]);
  for (int i = 0; i < 3; i++) {
    printf("%d %d\n", (int)k[i].x, (int)k[i].y);
  }
  return 0;
}
