#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  Point(double x, double y) {
    this->x = x;
    this->y = y;
  }
  Point() {}
};
Point a[2005];
int id[2005];
long long operator^(Point a, Point b) { return a.x * b.y - a.y * b.x; }
Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
struct Line {
  int x, y;
  Line(int x, int y) {
    this->x = x;
    this->y = y;
  }
  Line() {}
  Point vec() { return a[id[y]] - a[id[x]]; }
} s[4000005];
bool operator<(Line a, Line b) { return (a.vec() ^ b.vec()) < 0; }
bool operator<(Point a, Point b) { return a.x == b.x ? a.y < b.y : a.x < b.x; }
int main() {
  int n;
  long long m;
  cin >> n >> m;
  m *= 2;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].x >> a[i].y;
  }
  sort(a + 1, a + n + 1);
  int tot = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      s[++tot] = Line(i, j);
    }
  }
  for (int i = 1; i <= n; i++) {
    id[i] = i;
  }
  sort(s + 1, s + tot + 1);
  for (int i = 1; i <= tot; i++) {
    int x = id[s[i].x];
    int y = id[s[i].y];
    if (x > y) swap(x, y);
    int l = 1, r = x - 1;
    if (l <= r) {
      while (l <= r) {
        int mid = (l + r) / 2;
        if (abs((a[mid] - a[x]) ^ s[i].vec()) >= m) {
          l = mid + 1;
        } else
          r = mid - 1;
      }
      if (m == abs((a[r] - a[id[s[i].x]]) ^ s[i].vec())) {
        cout << "Yes" << endl;
        cout << a[r].x << " " << a[r].y << endl;
        cout << a[x].x << " " << a[x].y << endl;
        cout << a[y].x << " " << a[y].y << endl;
        return 0;
      }
    }
    swap(a[id[s[i].x]], a[id[s[i].y]]);
    swap(id[s[i].x], id[s[i].y]);
  }
  cout << "No" << endl;
  return 0;
}
