#include <bits/stdc++.h>   using namespace std;   const int maxn = 5e3 + 500;   const double eps = 1e-8;   int sgn(double x) {     if (fabs(x) < eps) return 0;     if (x < 0)       return -1;     else       return 1;   }   struct Point {     double x, y;     Point() {}     Point(double _x, double _y) : x(_x), y(_y) {}     void input() { scanf( %lf%lf , &x, &y); }     void output() { printf( %.0lf %.0lf n , x, y); }     Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }     bool operator==(const Point &b) const {       return sgn(x - b.x) == 0 && sgn(y - b.y) == 0;     }     bool operator<(const Point &b) const {       return sgn(x - b.x) == 0 ? sgn(y - b.y) < 0 : x < b.x;     }     double operator^(const Point &b) const { return x * b.y - y * b.x; }     double operator*(const Point &b) const { return x * b.x + y * b.y; }     double distance(Point b) { return hypot(x - b.x, y - b.y); }   };   struct polygon {     int n;     Point p[maxn], p1, p2, p3;     void input(int _n) {       n = _n;       for (int i = 0; i < n; ++i) p[i].input();     }     struct cmp {       Point p;       cmp(const Point &p0) { p = p0; }       bool operator()(const Point &aa, const Point &bb) {         Point a = aa, b = bb;         int d = sgn((a - p) ^ (b - p));         if (d == 0) return sgn(a.distance(p) - b.distance(p)) < 0;         return d > 0;       }     };     void norm() {       Point mi = p[0];       for (int i = 1; i < n; ++i) mi = min(mi, p[i]);       sort(p, p + n, cmp(mi));     }     void Graham(polygon &convex) {       norm();       int &top = convex.n;       top = 0;       if (n == 1) {         top = 1;         convex.p[0] = p[0];         return;       }       if (n == 2) {         top = 2;         convex.p[0] = p[0];         convex.p[1] = p[1];         if (convex.p[0] == convex.p[1]) top--;         return;       }       convex.p[0] = p[0];       convex.p[1] = p[1];       top = 2;       for (int i = 2; i < n; ++i) {         while (top > 1 && sgn((convex.p[top - 1] - convex.p[top - 2]) ^                               (p[i] - convex.p[top - 2])) <= 0)           top--;         convex.p[top++] = p[i];       }       if (convex.n == 2 && (convex.p[0] == convex.p[1])) convex.n--;     }     void rotating_calipers() {       double ans = 0;       for (int i = 0; i < n; ++i) {         int k = i + 1;         for (int j = i + 1; j < n; ++j) {           while (sgn(fabs((p[j] - p[i]) ^ (p[(k + 1) % n] - p[i])) -                      fabs((p[j] - p[i]) ^ (p[k] - p[i]))) > 0)             k = (k + 1) % n;           if (ans < 0.5 * fabs((p[j] - p[i]) ^ (p[k] - p[i]))) {             p1 = p[i];             p2 = p[j];             p3 = p[k];             ans = 0.5 * fabs((p[j] - p[i]) ^ (p[k] - p[i]));           }         }       }     }   } A, B;   int n;   long long s;   int main() {     scanf( %d%lld , &n, &s);     A.input(n);     A.Graham(B);     B.rotating_calipers();     printf( %.0lf %.0lf n , B.p1.x + B.p2.x - B.p3.x, B.p1.y + B.p2.y - B.p3.y);     printf( %.0lf %.0lf n , B.p1.x + B.p3.x - B.p2.x, B.p1.y + B.p3.y - B.p2.y);     printf( %.0lf %.0lf n , B.p3.x + B.p2.x - B.p1.x, B.p3.y + B.p2.y - B.p1.y);     return 0;   }   