#include <bits/stdc++.h>
using namespace std;
template <class T>
bool setmax(T& _a, T _b) {
  if (_b > _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
bool setmin(T& _a, T _b) {
  if (_b < _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
T gcd(T _a, T _b) {
  return _b == 0 ? _a : gcd(_b, _a % _b);
}
const int N = 5050;
struct Point {
  long long x, y;
  void read() { scanf("%lld%lld", &x, &y); }
  bool operator<(const Point& p) const {
    return x < p.x || (x == p.x && y < p.y);
  }
};
long long mult(Point p0, Point p1, Point p2) {
  return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);
}
vector<Point> convex(vector<Point> a) {
  vector<Point> b;
  sort(a.begin(), a.end());
  for (const auto& p : a) {
    while (static_cast<int>(b.size()) > 1 &&
           mult(b[static_cast<int>(b.size()) - 2], b.back(), p) <= 0)
      b.pop_back();
    b.push_back(p);
  }
  reverse(a.begin(), a.end());
  const int L = static_cast<int>(b.size());
  for (const auto& p : a) {
    while (static_cast<int>(b.size()) > L &&
           mult(b[static_cast<int>(b.size()) - 2], b.back(), p) <= 0)
      b.pop_back();
    b.push_back(p);
  }
  b.pop_back();
  return b;
}
int main() {
  int n;
  long long tmp;
  scanf("%d%lld", &n, &tmp);
  vector<Point> a(n);
  for (auto& p : a) p.read();
  a = convex(a);
  int z[3] = {0, 1, 2};
  while (1) {
    bool updated = false;
    for (int i = int(0); i <= int((3) - 1); ++i) {
      int zi = z[i], zj = z[(i + 1) % 3], zk = z[(i + 2) % 3];
      int zi1 = (zi + 1) % static_cast<int>(a.size());
      int zi2 =
          (zi - 1 + static_cast<int>(a.size())) % static_cast<int>(a.size());
      if (mult(a[zj], a[zk], a[zi1]) > mult(a[zj], a[zk], a[zi])) {
        zi = zi1;
        updated = true;
      }
      if (mult(a[zj], a[zk], a[zi2]) > mult(a[zj], a[zk], a[zi])) {
        zi = zi2;
        updated = true;
      }
      z[i] = zi;
    }
    if (!updated) break;
  }
  for (int i = int(0); i <= int((3) - 1); ++i) {
    int zi = z[i], zj = z[(i + 1) % 3], zk = z[(i + 2) % 3];
    long long x = a[zi].x + a[zj].x - a[zk].x;
    long long y = a[zi].y + a[zj].y - a[zk].y;
    printf("%lld %lld\n", x, y);
  }
  return 0;
}
