#include <bits/stdc++.h>   using namespace std;   #pragma GCC optimize( O2 )   #pragma GCC optimize( unroll-loops )   struct POINT {     int x, y;     POINT() : x(0), y(0) {}     POINT(int x, int y) : x(x), y(y) {}     POINT operator+(const POINT &t) const { return POINT(x + t.x, y + t.y); }     POINT operator-(const POINT &t) const { return POINT(x - t.x, y - t.y); }     POINT operator!() const { return POINT(-y, x); }   };   inline long long dot(const POINT &a, const POINT &b) {     return (long long)a.x * b.x + (long long)a.y * b.y;   }   inline long long cross(const POINT &a, const POINT &b) {     return (long long)a.x * b.y - (long long)a.y * b.x;   }   inline long long cross(const POINT &a, const POINT &b, const POINT &c) {     return cross(a - c, b - c);   }   inline bool halfPlane(const POINT &p) {     if (p.y == 0) return p.x < 0;     return p.y < 0;   }   inline bool angSortCmp(const POINT &a, const POINT &b) {     bool ha = halfPlane(a);     bool hb = halfPlane(b);     if (ha != hb) return ha < hb;     return cross(a, b) > 0;   }   const int N = 2000;   int n;   long long S;   POINT tab[N + 7];   int poz[N + 7];   POINT stab[N + 7];   struct kierunek {     POINT wek;     int p, q;   };   int main() {     ios_base::sync_with_stdio(0);     cin >> n >> S;     S *= 2;     for (int i = 1; i <= n; ++i) cin >> tab[i].x >> tab[i].y;     sort(tab + 1, tab + n + 1, [](const POINT &a, const POINT &b) -> bool {       if (a.x == b.x) return a.y > b.y;       return a.x < b.x;     });     for (int i = 1; i <= n; ++i) {       poz[i] = i;       stab[i] = tab[i];     }     vector<kierunek> kol((n * (n - 1)) / 2);     int it = 0;     for (int i = 1; i <= n; ++i) {       for (int j = i + 1; j <= n; ++j) {         kol[it].wek = !(tab[j] - tab[i]);         kol[it].p = i;         kol[it].q = j;         it++;       }     }     sort(kol.begin(), kol.end(),          [](const kierunek &a, const kierunek &b) -> bool {            return angSortCmp(a.wek, b.wek);          });     for (kierunek u : kol) {       int p = u.p;       int q = u.q;       swap(stab[poz[p]], stab[poz[q]]);       swap(poz[p], poz[q]);       int l = 1;       int r = n;       while (l <= r) {         int s = (l + r) / 2;         long long ww = cross(tab[q], stab[s], tab[p]);         if (ww == S) {           cout <<  Yes  << endl;           cout << tab[p].x <<     << tab[p].y << endl;           cout << tab[q].x <<     << tab[q].y << endl;           cout << stab[s].x <<     << stab[s].y << endl;           exit(0);         }         if (ww > S)           r = s - 1;         else           l = s + 1;       }       l = 1;       r = n;       while (l <= r) {         int s = (l + r) / 2;         long long ww = cross(tab[q], stab[s], tab[p]);         if (ww == -S) {           cout <<  Yes  << endl;           cout << tab[p].x <<     << tab[p].y << endl;           cout << tab[q].x <<     << tab[q].y << endl;           cout << stab[s].x <<     << stab[s].y << endl;           exit(0);         }         if (ww > -S)           r = s - 1;         else           l = s + 1;       }     }     cout <<  No  << endl;     return 0;   }   