#include <bits/stdc++.h>
using namespace std;
template <class T>
int chkmax(T &a, T b) {
  if (b > a) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
int chkmin(T &a, T b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
template <class iterator>
void output(iterator begin, iterator end, ostream &out = cerr) {
  while (begin != end) {
    out << (*begin) << " ";
    begin++;
  }
  out << '\n';
}
template <class T>
void output(T x, ostream &out = cerr) {
  output(x.begin(), x.end(), out);
}
struct vect {
  long long x, y;
  vect() : x(0), y(0) {}
  vect(long long _x, long long _y) : x(_x), y(_y) {}
};
vect operator+(vect a, vect b) { return vect(a.x + b.x, a.y + b.y); }
vect operator-(vect a, vect b) { return vect(a.x - b.x, a.y - b.y); }
long long operator*(vect a, vect b) { return a.x * b.x + a.y * b.y; }
long long operator/(vect a, vect b) { return a.x * b.y - a.y * b.x; }
bool operator==(vect a, vect b) { return a.x == b.x && a.y == b.y; }
bool operator!=(vect a, vect b) { return !(a == b); }
istream &operator>>(istream &is, vect &p) {
  is >> p.x >> p.y;
  return is;
}
ostream &operator<<(ostream &os, vect &p) {
  os << p.x << " " << p.y;
  return os;
}
int half_plane(vect p) { return (p.y < 0 || (p.y == 0 && p.x < 0)); }
bool operator<(vect a, vect b) {
  int pa = half_plane(a), pb = half_plane(b);
  if (pa < pb) return 1;
  if (pa > pb) return 0;
  if (a / b == 0) {
    return (a * a < b * b);
  }
  return a / b > 0;
}
bool same_dir(vect a, vect b) { return !(a < b) && !(b < a); }
long long norm(vect a) { return a * a; }
vect rotatem90(vect a) { return vect(a.y, -a.x); }
struct line {
  long double A, B, C;
  line() {}
  line(vect v1, vect v2) {
    A = v1.y - v2.y;
    B = v2.x - v1.x;
    C = -(long double)v1.x * A - (long double)v1.y * B;
    long double nrm = sqrt(A * A + B * B);
    A /= nrm;
    B /= nrm;
    C /= nrm;
  }
  long double get(vect v) {
    return (A * (long double)v.x + B * (long double)v.y + C);
  }
};
ostream &operator<<(ostream &os, line &l) {
  os << l.A << " " << l.B << " " << l.C;
  return os;
}
bool operator<(line a, line b) {
  return rotatem90(vect(a.A, a.B)) < rotatem90(vect(b.A, b.B));
}
bool ycmp(vect a, vect b) { return make_pair(a.y, a.x) < make_pair(b.y, b.x); }
bool pycmp(pair<vect, int> a, pair<vect, int> b) {
  return ycmp(a.first, b.first);
}
struct event {
  line l;
  int i, j;
};
const long double EPS = 1e-9;
int n;
long double S;
vector<vect> a, _a;
vector<int> p;
vector<event> ev;
vector<pair<vect, int> > vp;
bool operator<(event e1, event e2) {
  return (a[e1.j] - a[e1.i]) < (a[e2.j] - a[e2.i]);
}
void my_swap(int i, int j) {
  int pi = p[i];
  int pj = p[j];
  swap(a[pi], a[pj]);
  p[i] = pj;
  p[j] = pi;
}
long double length(vect v) { return sqrt(norm(v)); }
signed main() {
  cin >> n >> S;
  a.resize(n);
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    vp.push_back({a[i], i});
  }
  _a = a;
  ev.reserve(n * n);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      if (i != j && half_plane(a[j] - a[i]) == 0) {
        ev.push_back({line(a[i], a[j]), i, j});
      }
    }
  }
  p.resize(n);
  iota(p.begin(), p.end(), 0);
  sort(ev.begin(), ev.end());
  sort(vp.begin(), vp.end(), pycmp);
  for (int i = 0; i < n; ++i) {
    a[i] = vp[i].first;
    p[vp[i].second] = i;
  }
  for (int i = 0; i < ev.size(); ++i) {
    long double h = 2 * S / length(_a[ev[i].i] - _a[ev[i].j]);
    int l = 0, r = n - 1;
    while (r > l) {
      int mid = (l + r) >> 1;
      long double cur_h = ev[i].l.get(a[mid + 1]);
      if (cur_h > h + EPS)
        r = mid;
      else
        l = mid + 1;
    }
    long double cur_h = ev[i].l.get(a[l]);
    if (abs(h - cur_h) < EPS) {
      cout << "Yes" << '\n';
      cout << _a[ev[i].i] << '\n';
      cout << _a[ev[i].j] << '\n';
      cout << a[l] << '\n';
      return 0;
    }
    h = -2 * S / length(_a[ev[i].i] - _a[ev[i].j]);
    l = 0, r = n - 1;
    while (r > l) {
      int mid = (l + r) >> 1;
      long double cur_h = ev[i].l.get(a[mid + 1]);
      if (cur_h > h + EPS)
        r = mid;
      else
        l = mid + 1;
    }
    cur_h = ev[i].l.get(a[l]);
    if (abs(h - cur_h) < EPS) {
      cout << "Yes" << '\n';
      cout << _a[ev[i].i] << '\n';
      cout << _a[ev[i].j] << '\n';
      cout << a[l] << '\n';
      return 0;
    }
    my_swap(ev[i].i, ev[i].j);
  }
  cout << "No" << '\n';
}
