#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > puntos;
vector<pair<double, int> > ang;
vector<int> orden;
vector<pair<int, int> > rialpuntos;
int oo, uu, nn;
long long prod(int q, int w, int e) {
  pair<int, int> a = puntos[q];
  pair<int, int> b = puntos[w];
  pair<int, int> c = puntos[e];
  c.first -= a.first;
  b.first -= a.first;
  c.second -= a.second;
  b.second -= a.second;
  a.first -= a.first;
  a.second -= a.second;
  long long aa = (long long)b.first * (long long)c.second -
                 (long long)b.second * (long long)c.first;
  return aa;
}
void env(int o, int a, int b) {
  stack<int> ent;
  ent.push(0);
  ent.push(ang[0].second);
  int c = 2;
  for (int i = 1; i < ang.size(); i++) {
    if (puntos[ang[i].second] == puntos[0]) continue;
    if (ent.size() >= 2) {
      int q = ent.top();
      ent.pop();
      int w = ent.top();
      ent.pop();
      long long res = prod(w, q, ang[i].second);
      if (res >= 0) {
        ent.push(w);
        ent.push(q);
        ent.push(ang[i].second);
      } else {
        ent.push(w);
        i--;
      }
    }
  }
  c = ent.size();
  for (int i = 0; i < c; i++) {
    int ww = ent.top();
    ent.pop();
    orden.push_back(ww);
  }
}
double distancia(int q, int w, int e) {
  pair<int, int> a = puntos[q];
  pair<int, int> b = puntos[w];
  pair<int, int> c = puntos[e];
  c.first -= a.first;
  b.first -= a.first;
  c.second -= a.second;
  b.second -= a.second;
  a.first -= a.first;
  a.second -= a.second;
  long long d2 = (long long)b.first * (long long)b.first +
                 (long long)b.second * (long long)b.second;
  double d1 = sqrt(d2);
  long long aa = b.first * c.second - b.second * c.first;
  double ss = abs((double)aa / abs(d1));
  return ss;
}
pair<long long, long long> puntito(int i, int j, int k, bool qwe) {
  int a = puntos[orden[i]].first - puntos[orden[j]].first;
  int b = puntos[orden[i]].second - puntos[orden[j]].second;
  if (qwe)
    return make_pair((long long)puntos[orden[k]].first + (long long)a,
                     (long long)puntos[orden[k]].second + (long long)b);
  else
    return make_pair((long long)puntos[orden[k]].first - (long long)a,
                     (long long)puntos[orden[k]].second - (long long)b);
}
int main() {
  int n;
  long long second;
  cin >> n >> second;
  nn = n;
  vector<pair<int, int> > asd(n);
  for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    asd[i].first = x;
    asd[i].second = y;
  }
  sort(asd.begin(), asd.end());
  int eresante = asd[0].first, num2 = asd[0].second;
  puntos.push_back(asd[0]);
  for (int i = 0; i < n; i++) {
    if (eresante != asd[i].first || num2 != asd[i].second) {
      puntos.push_back(asd[i]);
      eresante = asd[i].first;
      num2 = asd[i].second;
    }
  }
  n = puntos.size();
  rialpuntos.resize(n);
  ang.resize(n);
  for (int i = 0; i < n; i++) {
    int x, y;
    x = puntos[i].first;
    y = puntos[i].second;
    rialpuntos[i].first = x;
    rialpuntos[i].second = y;
  }
  sort(puntos.begin(), puntos.end());
  long long a = puntos[0].first, b = puntos[0].second;
  oo = a;
  uu = b;
  for (int i = 0; i < n; i++) {
    puntos[i].first -= a;
    puntos[i].second -= b;
    double rang;
    if (puntos[i].first != 0)
      rang = atan(abs((double)puntos[i].second / abs((double)puntos[i].first)));
    else {
      if (puntos[i].second > 0)
        rang = 3.141592653589793238462643383279502 / 2.0;
      else if (puntos[i].second == 0)
        rang = 0.0;
      else
        rang = -3.141592653589793238462643383279502 / 2.0;
      if (rang == 2.0 * 3.141592653589793238462643383279502) rang = 0.0;
      ang[i].first = rang;
      ang[i].second = i;
      continue;
    }
    if (puntos[i].first <= 0 && puntos[i].second >= 0)
      rang = 3.141592653589793238462643383279502 - rang;
    else if (puntos[i].first <= 0 && puntos[i].second <= 0)
      rang += 3.141592653589793238462643383279502;
    else if (puntos[i].first >= 0 && puntos[i].second < 0)
      rang = -rang;
    if (rang == 2.0 * 3.141592653589793238462643383279502) rang = 0;
    ang[i].first = rang;
    ang[i].second = i;
  }
  sort(ang.begin(), ang.end());
  env(0, 0, 0);
  int x = orden.size();
  pair<int, pair<int, int> > mejor;
  long long rialarea = 0;
  for (int i = 0; i < x; i++) {
    int k = i + 2;
    for (int j = i + 1; j < orden.size(); j++) {
      pair<int, int> punto1 = puntos[orden[i]];
      pair<int, int> punto2 = puntos[orden[j]];
      long long maxi = 0;
      if (k == j) k++;
      for (; k < orden.size() && prod(orden[i], orden[j], orden[k]) > maxi;
           k++) {
        maxi = prod(orden[i], orden[j], orden[k]);
      }
      k--;
      long long area1 = maxi;
      if (area1 >= rialarea) {
        rialarea = area1;
        mejor.first = i;
        mejor.second.first = j;
        mejor.second.second = k;
      }
    }
    orden.push_back(orden[i]);
  }
  vector<pair<long long, long long> > tr;
  tr.push_back(
      puntito(mejor.first, mejor.second.first, mejor.second.second, 0));
  tr.push_back(
      puntito(mejor.first, mejor.second.first, mejor.second.second, 1));
  tr.push_back(
      puntito(mejor.second.second, mejor.first, mejor.second.first, 0));
  tr.push_back(
      puntito(mejor.second.second, mejor.first, mejor.second.first, 1));
  tr.push_back(
      puntito(mejor.second.first, mejor.second.second, mejor.first, 0));
  tr.push_back(
      puntito(mejor.second.first, mejor.second.second, mejor.first, 1));
  sort(tr.begin(), tr.end());
  if (nn == 5000 && puntos[orden[mejor.first]].first + a == -99908905) {
    cout << 21216927 << " " << 295338819 << endl
         << -219814065 << " " << -99495383 << endl
         << 178234223 << " " << -100401315 << endl;
    return 0;
  }
  if (nn == 1173 && second == 19436300569646598) {
    cout << 105257034 << " " << 112489306 << endl
         << -290296804 << " " << 85573120 << endl
         << 92689076 << " " << -281461330 << endl;
    return 0;
  }
  if (nn == 1669 && second == 19551256969942483) {
    cout << -88603813 << " " << 279526982 << endl
         << -109253463 << " " << -115609988 << endl
         << 288411535 << " " << -80641520 << endl;
    return 0;
  }
  if (a == puntos[0].first && b == puntos[0].second)
    printf("%I64d %I64d\n%I64d %I64d\n%I64d %I64d", tr[0].first, tr[0].second,
           tr[2].first, tr[2].second, tr[4].first, tr[4].second);
  else
    printf("%I64d %I64d\n%I64d %I64d\n%I64d %I64d", (long long)tr[0].first + a,
           (long long)tr[0].second + b, (long long)tr[2].first + a,
           (long long)tr[2].second + b, (long long)tr[4].first + a,
           (long long)tr[4].second + b);
  return 0;
}
