#include <bits/stdc++.h>
#pragma warning(disable : 4996)
FILE *in = stdin, *out = stdout;
using namespace std;
#pragma warning(disable : 4996)
struct PT {
  long long int x, y;
  PT() {}
  PT(double x, double y) : x(x), y(y) {}
  bool operator<(const PT& rhs) const {
    return make_pair(y, x) < make_pair(rhs.y, rhs.x);
  }
  bool operator==(const PT& rhs) const {
    return make_pair(y, x) == make_pair(rhs.y, rhs.x);
  }
  long long int operator*(const PT& A) { return x * A.y - y * A.x; }
  PT operator-(const PT& A) { return PT(x - A.x, y - A.y); }
} a[2005];
bool same(double x, double y) { return (y - 1e-10 <= x && x <= y + 1e-10); }
struct LINE {
 public:
  int num1, num2;
  double angle;
  LINE() : num1(0), num2(0), angle(0){};
  LINE(int n1, int n2, double ang) : num1(n1), num2(n2), angle(ang){};
} line[2005 * 2005];
bool cmp(const PT& A, const PT& B) { return A.y < B.y; }
bool cmp2(const LINE& A, const LINE& B) {
  if (!same(A.angle, B.angle)) return A.angle < B.angle;
  if (a[A.num1].x == a[B.num1].x) return a[A.num1].y < a[B.num1].y;
  return a[A.num1].x < a[B.num1].x;
}
int line_cnt, n;
long long int S;
int ord[2005], origin[2005];
void input() {
  fscanf(in, "%d %lld", &n, &S);
  for (int i = 1; i <= n; i++) {
    fscanf(in, "%lld %lld", &a[i].x, &a[i].y);
  }
  std::sort(a + 1, a + 1 + n, cmp);
  line_cnt = 0;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      line[++line_cnt] = LINE(i, j, atan2(a[j].y - a[i].y, a[j].x - a[i].x));
  std::sort(line + 1, line + 1 + line_cnt, cmp2);
  for (int i = 1; i <= n; i++) origin[i] = i, ord[i] = i;
}
long long int area(int x, int y, int z) {
  PT t1(a[x].x - a[y].x, a[x].y - a[y].y);
  PT t2(a[x].x - a[z].x, a[x].y - a[z].y);
  return abs(t1.x * t2.y - t1.y * t2.x);
}
void pro() {
  for (int i = 1; i <= line_cnt; i++) {
    LINE L = line[i];
    int l = max(ord[L.num1], ord[L.num2]) + 1, r = n, m;
    while (l <= r) {
      m = (l + r) >> 1;
      long long int A = area(L.num1, L.num2, origin[m]);
      if (A > S * 2) {
        r = m - 1;
      } else if (A < S * 2) {
        l = m + 1;
      } else {
        fprintf(out, "Yes\n");
        fprintf(out, "%lld %lld\n", a[L.num1].x, a[L.num1].y);
        fprintf(out, "%lld %lld\n", a[L.num2].x, a[L.num2].y);
        fprintf(out, "%lld %lld\n", a[origin[m]].x, a[origin[m]].y);
        return;
      }
    }
    l = 1, r = min(ord[L.num1], ord[L.num2]) - 1, m;
    while (l <= r) {
      m = (l + r) >> 1;
      long long int A = area(L.num1, L.num2, origin[m]);
      if (A > S * 2) {
        r = m - 1;
      } else if (A < S * 2) {
        l = m + 1;
      } else {
        fprintf(out, "Yes\n");
        fprintf(out, "%lld %lld\n", a[L.num1].x, a[L.num1].y);
        fprintf(out, "%lld %lld\n", a[L.num2].x, a[L.num2].y);
        fprintf(out, "%lld %lld\n", a[origin[m]].x, a[origin[m]].y);
        return;
      }
    }
    int t1 = ord[L.num1], t2 = ord[L.num2];
    std::swap(ord[L.num1], ord[L.num2]);
    std::swap(origin[t1], origin[t2]);
  }
  fprintf(out, "No\n");
}
int main() {
  input();
  pro();
  return 0;
}
