#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000 + 5;
const double PI = acos(-1.0);
const double eps = 1e-8;
struct Point {
  int x, y;
  bool operator<(const Point& p) const {
    if (x != p.x) return x < p.x;
    return y < p.y;
  }
  Point operator-(Point p) { return {x - p.x, y - p.y}; }
  Point operator+(Point p) { return {x + p.x, y + p.y}; }
} pp[MAXN];
long long cross(Point a, Point b) { return 1LL * a.x * b.y - 1LL * a.y * b.x; }
struct Segment {
  int u, v;
  double angle;
  bool operator<(const Segment& s) const { return angle < s.angle; }
} ss[MAXN * MAXN];
int pos[MAXN];
int main() {
  int n;
  long long s;
  scanf("%d%lld", &n, &s);
  s *= 2;
  for (int i = 1; i <= n; i++) scanf("%d%d", &pp[i].x, &pp[i].y);
  sort(pp + 1, pp + n + 1);
  for (int i = 1; i <= n; i++) pos[i] = i;
  int m = 0;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      double xita = atan2(pp[i].y - pp[j].y, pp[i].x - pp[j].x);
      if (xita < -eps) xita += 2 * PI;
      ss[++m] = {i, j, xita};
    }
  sort(ss + 1, ss + m + 1);
  for (int i = 1; i <= m; i++) {
    int &a = pos[ss[i].u], &b = pos[ss[i].v];
    Point p = pp[b] - pp[a];
    int l = 1, r = a;
    while (l < r) {
      int mid = (l + r) / 2;
      if (cross(pp[mid] - pp[a], p) > s)
        l = mid + 1;
      else
        r = mid;
    }
    if (cross(pp[l] - pp[a], p) == s) {
      printf("Yes\n%d %d\n%d %d\n%d %d\n", pp[a].x, pp[a].y, pp[b].x, pp[b].y,
             pp[l].x, pp[l].y);
      return 0;
    }
    swap(a, b);
    swap(pp[a], pp[b]);
  }
  printf("No\n");
  return 0;
}
