#include <bits/stdc++.h>
using namespace std;
const int Imx = 2147483647;
const long long Lbig = 2e18;
const int mod = 1e9 + 7;
struct fastio {
  char s[100000];
  int it, len;
  fastio() { it = len = 0; }
  inline char get() {
    if (it < len) return s[it++];
    it = 0;
    len = fread(s, 1, 100000, stdin);
    if (len == 0)
      return EOF;
    else
      return s[it++];
  }
  bool notend() {
    char c = get();
    while (c == ' ' || c == '\n') c = get();
    if (it > 0) it--;
    return c != EOF;
  }
} _buff;
inline long long getnum() {
  long long r = 0;
  bool ng = 0;
  char c;
  c = _buff.get();
  while (c != '-' && (c < '0' || c > '9')) c = _buff.get();
  if (c == '-') ng = 1, c = _buff.get();
  while (c >= '0' && c <= '9') r = r * 10 + c - '0', c = _buff.get();
  return ng ? -r : r;
}
template <class T>
inline void putnum(T x) {
  if (x < 0) putchar('-'), x = -x;
  register short a[20] = {}, sz = 0;
  while (x) a[sz++] = x % 10, x /= 10;
  if (sz == 0) putchar('0');
  for (int i = sz - 1; i >= 0; i--) putchar('0' + a[i]);
}
inline char getreal() {
  char c = _buff.get();
  while (c <= 32) c = _buff.get();
  return c;
}
long long qpow(long long x, long long k) {
  return k == 0 ? 1
                : 1ll * qpow(1ll * x * x % mod, k >> 1) * (k & 1 ? x : 1) % mod;
}
long long Cx, Cy;
const double eps = 1e-10;
const double pi = acos(-1);
inline bool is0(double x) { return x < eps && x > -eps; }
inline double modp(double x) { return x < 0 ? x + 2 * pi : x; }
struct point {
  int x, y;
  double rad;
  point(int X = 0, int Y = 0) {
    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); }
  long long det(const point &t) const { return 1ll * x * t.y - 1ll * y * t.x; }
  long long dot(const point &t) const { return 1ll * x * t.x + 1ll * y * t.y; }
  bool operator<(const point &t) const {
    if (det(t) != 0)
      return det(t) > 0;
    else
      return (point(Cx, Cy).dot(*this) > 0) > (point(Cx, Cy).dot(t) > 0);
  }
  void out() { cout << x << " " << y << endl; }
};
bool cmp_init(point x, point y) {
  return make_pair(x.y, x.x) < make_pair(y.y, y.x);
}
const int maxn = 2011;
int n;
long long S;
point a[maxn];
set<pair<point, int> > st;
void del_gap(int x) {
  if (x >= 0 && x + 1 < n) st.erase(make_pair(a[x + 1] - a[x], x));
}
void add_gap(int x) {
  if (x >= 0 && x + 1 < n) st.insert(make_pair(a[x + 1] - a[x], x));
}
void query(int x, point p, long long s) {
  int l = 0, r = n - 1;
  while (l <= r) {
    int m = l + r >> 1;
    long long curs = p.det(a[m] - a[x]);
    if (curs == s) {
      puts("Yes");
      a[x].out();
      a[x + 1].out();
      a[m].out();
      exit(0);
    } else if (curs < s)
      l = m + 1;
    else
      r = m - 1;
  }
}
void SWAP(int x) {
  del_gap(x - 1);
  del_gap(x);
  del_gap(x + 1);
  query(x, a[x + 1] - a[x], -2 * S);
  query(x, a[x + 1] - a[x], 2 * S);
  swap(a[x], a[x + 1]);
  add_gap(x - 1);
  add_gap(x);
  add_gap(x + 1);
}
void solve() {
  bool pre = 0;
  int ti = 0;
  while (true) {
    Cx = st.begin()->first.x;
    Cy = st.begin()->first.y;
    int x = st.begin()->second;
    SWAP(x);
    if (pre && !(point(Cx, Cy) < point(1, 0))) break;
    pre = point(Cx, Cy) < point(1, 0);
    if (pre) break;
  }
  puts("No");
}
int main() {
  n = getnum(), S = getnum();
  for (int i = 0; i < n; i++) a[i].x = getnum(), a[i].y = getnum();
  sort(a, a + n, cmp_init);
  Cx = 1;
  Cy = 0;
  for (int i = 0; i < n; i++) add_gap(i);
  solve();
  return 0;
}
