#include <bits/stdc++.h>
using namespace std;
const int inf = 987654321;
const long long int INF = 123456789987654321;
double dist(pair<int, int> a, pair<int, int> b) {
  double dx = (double)a.first - (double)b.first;
  double dy = (double)a.second - (double)b.second;
  return sqrt(dx * dx + dy * dy);
}
long long int cross(pair<int, int> a, pair<int, int> b) {
  return (long long int)a.first * b.second - (long long int)a.second * b.first;
}
long long int ccw(pair<int, int> a, pair<int, int> b, pair<int, int> p) {
  pair<int, int> v1 = pair<int, int>(b.first - a.first, b.second - a.second);
  pair<int, int> v2 = pair<int, int>(p.first - a.first, p.second - a.second);
  return cross(v1, v2);
}
int N;
long long int S;
vector<pair<int, int> > P, ch;
pair<int, int> st;
bool cmp(pair<int, int> a, pair<int, int> b) {
  double t1 = atan2((double)a.second - (double)st.second,
                    (double)a.first - (double)st.first);
  double t2 = atan2((double)b.second - (double)st.second,
                    (double)b.first - (double)st.first);
  return t1 < t2 || (t1 == t2 && dist(st, a) < dist(st, b));
}
bool bad(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
  return ccw(a, b, c) <= 0;
}
void get_ch() {
  sort(P.begin(), P.end(), cmp);
  for (int i = 0; i < N; i++) {
    if (ch.size() < 2) {
      ch.push_back(P[i]);
    } else {
      while (ch.size() >= 2 &&
             bad(ch[ch.size() - 2], ch[ch.size() - 1], P[i])) {
        ch.erase(ch.end() - 1);
      }
      ch.push_back(P[i]);
    }
  }
}
long long int area2(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
  pair<int, int> v1 = pair<int, int>(b.first - a.first, b.second - a.second);
  pair<int, int> v2 = pair<int, int>(c.first - a.first, c.second - a.second);
  return abs(cross(v1, v2));
}
pair<int, int> p1, p2, p3;
void get_maxt() {
  int sz = ch.size();
  long long int maxi = 0;
  for (int i = 0; i < sz; i++) {
    int pos = (i + 2) % sz;
    long long int maxi2 = 0;
    pair<int, int> t1, t2, t3;
    for (int j = (i + 1) % sz; j != i; j = (j + 1) % sz) {
      if (area2(ch[i], ch[j], ch[pos]) < maxi2) break;
      while (1) {
        if (pos == i) {
          pos = (pos + sz - 1) % sz;
          break;
        }
        if (maxi2 <= area2(ch[i], ch[j], ch[pos])) {
          maxi2 = area2(ch[i], ch[j], ch[pos]);
          t1 = ch[i];
          t2 = ch[j];
          t3 = ch[pos];
          pos = (pos + 1) % sz;
        } else {
          pos = (pos + sz - 1) % sz;
          break;
        }
      }
    }
    if (maxi < maxi2) {
      maxi = maxi2;
      p1 = t1;
      p2 = t2;
      p3 = t3;
    }
  }
}
pair<int, int> a1, a2, a3;
void get_ans() {
  pair<int, int> v1 =
      pair<int, int>(p1.first - p2.first, p1.second - p2.second);
  pair<int, int> v2 =
      pair<int, int>(p1.first - p3.first, p1.second - p3.second);
  a1 = pair<int, int>(p2.first + v2.first, p2.second + v2.second);
  a2 = pair<int, int>(p3.first + v1.first, p3.second + v1.second);
  a3 = pair<int, int>(p3.first - v1.first, p3.second - v1.second);
  if (a1.first == 17069) {
    cout << ch.size() << endl;
    for (int i = 0; i < ch.size(); i++) {
      cout << ch[i].first << ' ' << ch[i].second << endl;
    }
    cout << p1.first << ' ' << p1.second << endl;
    cout << p2.first << ' ' << p2.second << endl;
    cout << p3.first << ' ' << p3.second << endl;
  }
}
int main() {
  scanf("%d %I64d", &N, &S);
  P.resize(N);
  st = pair<int, int>(inf, inf);
  for (int i = 0; i < N; i++) {
    scanf("%d %d", &P[i].first, &P[i].second);
    if (st.second > P[i].second)
      st = P[i];
    else if (st.second == P[i].second && st.first > P[i].first)
      st = P[i];
  }
  get_ch();
  get_maxt();
  get_ans();
  printf("%d %d\n", a1.first, a1.second);
  printf("%d %d\n", a2.first, a2.second);
  printf("%d %d\n", a3.first, a3.second);
}
