#include <bits/stdc++.h>
using namespace std;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x + _y;
  if (_ >= _mod) _ -= _mod;
  return _;
}
inline long long sub(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x - _y;
  if (_ < 0) _ += _mod;
  return _;
}
inline long long mul(long long _x, long long _y,
                     long long _mod = 1000000007ll) {
  long long _ = _x * _y;
  if (_ >= _mod) _ %= _mod;
  return _;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1ll;
  long long _tmp = mypow(_a, _x / 2, _mod);
  _tmp = mul(_tmp, _tmp, _mod);
  if (_x & 1) _tmp = mul(_tmp, _a, _mod);
  return _tmp;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0ll;
  long long _tmp = mymul(_a, _x / 2, _mod);
  _tmp = add(_tmp, _tmp, _mod);
  if (_x & 1) _tmp = add(_tmp, _a, _mod);
  return _tmp;
}
inline bool equal(double _x, double _y) {
  return _x > _y - 1e-3 && _x < _y + 1e-3;
}
int __ = 1, _cs;
inline pair<long long, long long> operator+(
    const pair<long long, long long>& p1,
    const pair<long long, long long>& p2) {
  return {p1.first + p2.first, p1.second + p2.second};
}
inline pair<long long, long long> operator-(
    const pair<long long, long long>& p1,
    const pair<long long, long long>& p2) {
  return {p1.first - p2.first, p1.second - p2.second};
}
inline long long operator^(const pair<long long, long long>& p1,
                           const pair<long long, long long>& p2) {
  return p1.first * p2.second - p1.second * p2.first;
}
inline long long area(const pair<long long, long long>& p1,
                      const pair<long long, long long>& p2,
                      const pair<long long, long long>& p3) {
  return abs((p1 ^ p2) + (p2 ^ p3) + (p3 ^ p1));
}
long long n, s;
vector<pair<long long, long long> > p, ch;
void build() {}
inline void convexHull() {
  sort((p).begin(), (p).end());
  size_t psz = 0, csz = 0;
  for (int _ = 0; _ < 2; _++) {
    for (size_t i = 0; i < p.size(); i++) {
      while (csz - psz > 1 &&
             ((ch[csz - 1] - ch[csz - 2]) ^ (p[i] - ch[csz - 2])) <= 0) {
        ch.pop_back();
        csz--;
      }
      ch.push_back(p[i]);
      csz++;
    }
    psz = ch.size() - 1;
    reverse((p).begin(), (p).end());
  }
}
void init() {
  n = getint();
  s = getint();
  for (int i = 0; i < n; i++) {
    long long tx = getint();
    long long ty = getint();
    p.push_back({tx, ty});
  }
  if (n == 3) {
    for (size_t i = 0; i < p.size(); i++)
      printf("%lld %lld\n", p[i].first, p[i].second);
    exit(0);
  }
  convexHull();
}
void solve() {
  ch.pop_back();
  size_t sz = ch.size();
  for (size_t i = 0; i < sz; i++) ch.push_back(ch[i]);
  for (size_t i = 0; i < sz; i++) ch.push_back(ch[i]);
  for (size_t i = 0; i < sz; i++) ch.push_back(ch[i]);
  int n1 = 0, n2 = 0, n3 = 0;
  long long bst = -1;
  for (size_t i = 0, j = 0, k = 0; i < sz; i++) {
    if (j <= i) j = i + 1;
    if (k <= j) k = j + 1;
    while (area(ch[i], ch[j], ch[k + 1]) > area(ch[i], ch[j], ch[k])) k++;
    while (area(ch[i], ch[k], ch[j + 1]) > area(ch[i], ch[k], ch[j])) j++;
    long long narea = area(ch[i], ch[j], ch[k]);
    if (narea > bst) {
      bst = narea;
      n1 = i;
      n2 = j;
      n3 = k;
    }
  }
  pair<long long, long long> a1 = ch[n1] + (ch[n3] - ch[n2]);
  pair<long long, long long> a2 = ch[n2] + (ch[n1] - ch[n3]);
  pair<long long, long long> a3 = ch[n3] + (ch[n2] - ch[n1]);
  printf("%lld %lld\n", a1.first, a1.second);
  printf("%lld %lld\n", a2.first, a2.second);
  printf("%lld %lld\n", a3.first, a3.second);
}
int main() {
  build();
  while (__--) {
    init();
    solve();
  }
}
