#include <bits/stdc++.h>
using namespace std;
bool ooo = 0;
template <typename T>
ostream& operator<<(ostream& _o_, const vector<T>& _v_) {
  if (!_v_.empty()) {
    _o_ << '[';
    copy(_v_.begin(), _v_.end(), ostream_iterator<T>(_o_, ", "));
    _o_ << "\b\b]";
  }
  return _o_;
}
struct Dbg {
  template <typename T>
  Dbg& operator,(const T& v) {
    cout << v << ", ";
    return *this;
  }
} Dbg;
struct useful {
  useful() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
  }
} useful;
const long long N = 300003, mod = 1e9 + 7;
struct point {
  long long x, y;
  bool operator<(const point& o) const {
    return x < o.x || (x == o.x && y < o.y);
  }
} st, en;
struct ans_list {
  point a, b, c;
} ans;
long long n, s, be, ce;
vector<point> v, up, down;
long long check(point a, point b, point c) {
  return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
}
long long area(point a, point b, point c) {
  return abs((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));
}
signed main() {
  cin >> n >> s;
  for (long long i = 1, x, y; i <= n; i++) {
    cin >> x >> y;
    v.push_back({x, y});
  }
  sort(v.begin(), v.end());
  st = v[0], en = v.back();
  for (long long i = 0; i < (long long)v.size(); i++) {
    if (i != (long long)v.size() - 1 && check(v[i], st, en) < 0) continue;
    while (up.size() >= 2 &&
           check(up[up.size() - 1], up[up.size() - 2], v[i]) < 0) {
      up.pop_back();
    }
    up.push_back(v[i]);
  }
  for (long long i = 0; i < (long long)v.size(); i++) {
    if (i != (long long)v.size() - 1 && check(v[i], st, en) > 0) continue;
    while (down.size() >= 2 &&
           check(down[down.size() - 1], down[down.size() - 2], v[i]) > 0) {
      down.pop_back();
    }
    down.push_back(v[i]);
  }
  v.clear();
  for (auto x : up) {
    v.push_back(x);
  }
  for (long long i = down.size() - 2; i >= 1; i--) {
    v.push_back(down[i]);
  }
  long long n = v.size();
  for (long long i = 0; i < n; i++) {
    be = (i + 1) % n, ce = (i + 2) % n;
    while (1) {
      while (area(v[i], v[be], v[ce]) <= area(v[i], v[be], v[(ce + 1) % n]) &&
             ((ce + 1) % n) != i) {
        ce = (ce + 1) % n;
      }
      if (area(v[i], v[be], v[ce]) <= area(v[i], v[(be + 1) % n], v[ce]) &&
          ((be + 1) % n) != ce) {
        be = (be + 1) % n;
      } else {
        break;
      }
    }
    if (ooo) {
      cout << "be, ce"
           << " = ";
      Dbg, be, ce;
      cout << endl;
    };
    if (area(ans.a, ans.b, ans.c) < area(v[i], v[be], v[ce])) {
      ans = (ans_list){v[i], v[be], v[ce]};
    }
  }
  cout << ans.a.x + ans.b.x - ans.c.x << ' ' << ans.a.y + ans.b.y - ans.c.y
       << '\n';
  cout << ans.a.x - ans.b.x + ans.c.x << ' ' << ans.a.y - ans.b.y + ans.c.y
       << '\n';
  cout << -ans.a.x + ans.b.x + ans.c.x << ' ' << -ans.a.y + ans.b.y + ans.c.y
       << '\n';
}
