#include <bits/stdc++.h>
using namespace std;
struct point {
  long long x, y;
  point() {}
  point(long long x, long long y) : x(x), y(y) {}
  point(const point& p) : x(p.x), y(p.y) {}
  point operator+(const point& p) const { return point(x + p.x, y + p.y); }
  point operator-(const point& p) const { return point(x - p.x, y - p.y); }
};
bool operator<(const point& xx, const point& yy) {
  return make_pair(xx.x, xx.y) < make_pair(yy.x, yy.y);
}
bool operator==(const point& xx, const point& yy) {
  return make_pair(xx.x, xx.y) == make_pair(yy.x, yy.y);
}
inline long long dot_product(point xx, point yy) {
  return (xx.x * yy.x) + (xx.y * yy.y);
}
inline long long cross_product(point xx, point yy) {
  return (xx.x * yy.y) - (xx.y * yy.x);
}
inline long long sqdist(point xx, point yy) {
  return dot_product(xx - yy, xx - yy);
}
inline long double dist(point xx, point yy) { return sqrt(sqdist(xx, yy)); }
inline bool anti(point xx, point yy) {
  if (cross_product(xx, yy) > 0) {
    return true;
  }
  return false;
}
point lowbot;
inline bool compare(point xx, point yy) {
  if (cross_product(xx - lowbot, yy - lowbot) == 0) {
    return sqdist(lowbot, xx) < sqdist(lowbot, yy);
  }
  return cross_product(xx - lowbot, yy - lowbot) > 0;
}
inline vector<point> convex_hull(vector<point> v) {
  int id = 0;
  lowbot = v[0];
  for (int i = 1; i < v.size(); i++) {
    if ((lowbot.y > v[i].y) || (lowbot.y == v[i].y && (lowbot.x > v[i].x))) {
      id = i;
      lowbot = v[id];
    }
  }
  swap(v[0], v[id]);
  sort(v.begin() + 1, v.end(), compare);
  vector<point> ans;
  ans.push_back(v[0]);
  ans.push_back(v[1]);
  for (int i = 2; i < v.size(); i++) {
    while (ans.size() >= 2) {
      if (!anti(ans[ans.size() - 1] - ans[ans.size() - 2],
                v[i] - ans[ans.size() - 1])) {
        ans.pop_back();
      } else {
        break;
      }
    }
    ans.push_back(v[i]);
  }
  return ans;
}
inline long double triarea(point xx, point yy, point zz) {
  long double ans = (xx.x * yy.y - yy.x * xx.y) + (yy.x * zz.y - zz.x * yy.y) +
                    (zz.x * xx.y - zz.y * xx.x);
  return fabs(ans) / 2.0;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;
  long long s;
  cin >> s;
  vector<point> v;
  for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    v.push_back(point(x, y));
  }
  vector<point> hull = convex_hull(v);
  int m = hull.size();
  int a = 0, b = 1, c = 2, ansa, ansb, ansc;
  long double ans = 0.0;
  for (int i = 0; i < hull.size(); i++) {
    a = i;
    b = (a + 1) % m;
    c = (b + 1) % m;
    while (1) {
      while (1) {
        if (triarea(hull[a], hull[b], hull[c]) <=
            triarea(hull[a], hull[b], hull[(c + 1) % m])) {
          c = (c + 1) % m;
        } else {
          break;
        }
      }
      if (triarea(hull[a], hull[b], hull[c]) <=
          triarea(hull[a], hull[(b + 1) % m], hull[c])) {
        b = (b + 1) % m;
      } else {
        break;
      }
    }
    if (ans + 1e-12 < triarea(hull[a], hull[b], hull[c])) {
      ans = triarea(hull[a], hull[b], hull[c]);
      ansa = a, ansb = b, ansc = c;
    }
  }
  point pt1 = hull[ansa];
  point pt2 = hull[ansb];
  point pt3 = hull[ansc];
  point fans1 = pt1 - (pt2 - pt3);
  point fans2 = pt1 + (pt2 - pt3);
  point fans3 = pt2 + (pt1 - pt3);
  if (fans3 == fans1 || fans3 == fans2) {
    fans3 = pt2 - (pt1 - pt3);
  }
  cout << fans1.x << " " << fans1.y << "\n";
  cout << fans2.x << " " << fans2.y << "\n";
  cout << fans3.x << " " << fans3.y << "\n";
}
