#include <bits/stdc++.h>
using namespace std;
struct abc {
  long long p1;
  long long p2;
  long long p3;
};
long long n, s, x, y;
long long A, B, C;
abc points;
double max_area, m_area;
;
vector<pair<long long, long long> > vect;
void convex_hull();
bool turn_right(pair<long long, long long> a, pair<long long, long long> b,
                pair<long long, long long> c);
bool turn_left(pair<long long, long long> a, pair<long long, long long> b,
               pair<long long, long long> c);
void find_points();
double area(pair<long long, long long>, pair<long long, long long>,
            pair<long long, long long>);
void find_ans(pair<long long, long long>, pair<long long, long long>,
              pair<long long, long long>);
void check_hull();
void check_points();
int main() {
  cin >> n >> s;
  for (long long i = 1; i <= n; i++) {
    cin >> x >> y;
    vect.push_back(make_pair(x, y));
  }
  convex_hull();
  find_points();
  find_ans(vect[points.p1], vect[points.p2], vect[points.p3]);
  return 0;
}
bool turn_right(pair<long long, long long> a, pair<long long, long long> b,
                pair<long long, long long> c) {
  return a.first * (b.second - c.second) + b.first * (c.second - a.second) +
             c.first * (a.second - b.second) <
         0;
}
bool turn_left(pair<long long, long long> a, pair<long long, long long> b,
               pair<long long, long long> c) {
  return a.first * (b.second - c.second) + b.first * (c.second - a.second) +
             c.first * (a.second - b.second) >
         0;
}
void convex_hull() {
  vector<pair<long long, long long> > up, down;
  pair<long long, long long> p1, p2;
  if (vect.size() == 1) return;
  sort(vect.begin(), vect.end());
  p1 = vect.front();
  p2 = vect.back();
  up.push_back(p1);
  down.push_back(p1);
  for (long long i = 1; i < vect.size(); i++) {
    if (i == vect.size() - 1 || turn_right(p1, vect[i], p2)) {
      while (up.size() >= 2 &&
             !turn_right(up[up.size() - 2], up[up.size() - 1], vect[i]))
        up.pop_back();
      up.push_back(vect[i]);
    }
    if (i == vect.size() - 1 || turn_left(p1, vect[i], p2)) {
      while (down.size() >= 2 &&
             !turn_left(down[down.size() - 2], down[down.size() - 1], vect[i]))
        down.pop_back();
      down.push_back(vect[i]);
    }
  }
  vect.clear();
  for (long long i = 0; i < up.size(); ++i) vect.push_back(up[i]);
  for (long long i = down.size() - 2; i > 0; --i) vect.push_back(down[i]);
  vect.push_back(vect.front());
}
void check_hull() {
  cout << endl << "Convex hull : " << endl;
  for (long long i = 0; i < vect.size(); i++)
    cout << vect[i].first << " " << vect[i].second << endl;
}
void find_points() {
  double ans_area = 0;
  A = 0;
  B = 1;
  C = 2;
  points.p1 = 0;
  points.p2 = B;
  points.p3 = C;
  while (true) {
    max_area = area(vect[A], vect[B], vect[C]);
    while (true) {
      while (true) {
        int nC = (C + 1) % vect.size();
        m_area = area(vect[A], vect[B], vect[nC]);
        if (m_area >= max_area) {
          C = nC;
          max_area = m_area;
        } else
          break;
      }
      long long nB = (B + 1) % vect.size();
      m_area = area(vect[A], vect[nB], vect[C]);
      if (m_area >= max_area) {
        B = nB;
        max_area = m_area;
      } else
        break;
    }
    if (max_area > ans_area) {
      ans_area = max_area;
      points.p1 = A;
      points.p2 = B;
      points.p3 = C;
    }
    A++;
    if (A == B) B = (B + 1) % vect.size();
    if (B == C) C = (C + 1) % vect.size();
    if (A == vect.size() - 1) break;
  }
}
double area(pair<long long, long long> a, pair<long long, long long> b,
            pair<long long, long long> c) {
  return abs((double)a.first * b.second + (double)b.first * c.second +
             (double)c.first * a.second - (double)a.second * b.first -
             (double)b.second * c.first - (double)c.second * a.first) /
         2.0;
}
void check_points() {
  cout << endl << "Triangle points : " << endl;
  cout << vect[points.p1].first << " " << vect[points.p1].second << endl;
  cout << vect[points.p2].first << " " << vect[points.p2].second << endl;
  cout << vect[points.p3].first << " " << vect[points.p3].second << endl;
}
void find_ans(pair<long long, long long> a, pair<long long, long long> b,
              pair<long long, long long> c) {
  pair<int, int> a1, b1, c1;
  a1.first = b.first + c.first - a.first;
  a1.second = b.second + c.second - a.second;
  b1.first = c.first + a.first - b.first;
  b1.second = c.second + a.second - b.second;
  c1.first = a.first + b.first - c.first;
  c1.second = a.second + b.second - c.second;
  cout << a1.first << " " << a1.second << endl;
  cout << b1.first << " " << b1.second << endl;
  cout << c1.first << " " << c1.second << endl;
}
