#include <bits/stdc++.h>
const int N = 4e6 + 10;
int idx[N], rank[N];
struct Point {
  int x, y;
} A[N], Line[N];
inline double slope(Point a) {
  return double(A[a.x].y - A[a.y].y) / double(A[a.x].x - A[a.y].x);
}
inline long long area(Point A, Point B, Point C) {
  return fabs(1LL * (A.x - C.x) * (B.y - C.y) -
              1LL * (B.x - C.x) * (A.y - C.y));
}
inline int find1(int l, int r, int u, int v, long long s) {
  int res = -1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (area(A[idx[mid]], A[u], A[v]) >= s)
      l = mid + 1, res = mid;
    else
      r = mid - 1;
  }
  return res != -1 && area(A[idx[res]], A[u], A[v]) == s ? res : -1;
}
inline int find2(int l, int r, int u, int v, long long s) {
  int res = -1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (area(A[idx[mid]], A[u], A[v]) <= s)
      l = mid + 1, res = mid;
    else
      r = mid - 1;
  }
  return res != -1 && area(A[idx[res]], A[u], A[v]) == s ? res : -1;
}
inline int solve(int u, int v, int n, long long s) {
  if (rank[u] > rank[v]) std::swap(u, v);
  int res1 = find1(1, rank[u] - 1, u, v, s);
  if (res1 != -1) return res1;
  int res2 = find2(rank[v] + 1, n, u, v, s);
  if (res2 != -1) return res2;
  std::swap(rank[u], rank[v]), std::swap(idx[rank[u]], idx[rank[v]]);
  return 0;
}
int main() {
  int n, tot = 0;
  long long s;
  std::cin >> n >> s;
  s <<= 1;
  for (int i = 1; i <= n; ++i)
    std::cin >> A[i].x >> A[i].y, idx[i] = i, rank[i] = i;
  std::sort(A + 1, A + n + 1, [&](const Point &a, const Point &b) {
    return a.x < b.x || a.x == b.x && a.y < b.y;
  });
  for (int i = 1; i <= n; ++i)
    for (int j = i + 1; j <= n; ++j) Line[++tot] = Point{i, j};
  std::sort(Line + 1, Line + tot + 1, [&](const Point &a, const Point &b) {
    int x1 = A[a.y].x - A[a.x].x, y1 = A[a.y].y - A[a.x].y;
    int x2 = A[b.y].x - A[b.x].x, y2 = A[b.y].y - A[b.x].y;
    return 1LL * x1 * y2 - 1LL * x2 * y1 > 0;
  });
  for (int i = 1; i <= tot; ++i) {
    int res = solve(Line[i].x, Line[i].y, n, s);
    if (res)
      return printf("Yes\n%d %d\n%d %d\n%d %d\n", (A[Line[i].x]).x,
                    (A[Line[i].x]).y, (A[Line[i].y]).x, (A[Line[i].y]).y,
                    (A[idx[res]]).x, (A[idx[res]]).y),
             0;
  }
  return puts("No"), 0;
}
