#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O2")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
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;
}
