#include <bits/stdc++.h>
using namespace std;
const int maxn = 2010;
const double PI = acos(-1);
istream& operator>>(istream& in, pair<int, int>& p) {
  in >> p.first >> p.second;
  return in;
}
ostream& operator<<(ostream& out, pair<int, int> p) {
  out << p.first << " " << p.second;
  return out;
}
pair<int, int> operator-(pair<int, int> a, pair<int, int> b) {
  return {a.first - b.first, a.second - b.second};
}
long long operator*(pair<int, int> a, pair<int, int> b) {
  return 1ll * a.first * b.second - 1ll * a.second * b.first;
}
pair<int, int> p[maxn];
vector<pair<int, int> > vec;
int arr[maxn], pos[maxn];
void print(int a, int b, int c) {
  cout << "Yes\n" << p[a] << "\n" << p[b] << "\n" << p[c] << "\n";
  exit(0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie();
  int n;
  cin >> n;
  long long second;
  cin >> second;
  second *= 2;
  for (int i = 0; i < n; i++) cin >> p[i], pos[i] = arr[i] = i;
  sort(p, p + n, [](pair<int, int> a, pair<int, int> b) {
    return a.second == b.second ? a.first < b.first : a.second < b.second;
  });
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (i != j) vec.push_back({i, j});
  sort(vec.begin(), vec.end(), [](pair<int, int> i, pair<int, int> j) {
    pair<int, int> A = p[i.first] - p[i.second], B = p[j.first] - p[j.second];
    int _A = A.second < 0 || (A.second == 0 && A.first < 0);
    int _B = B.second < 0 || (B.second == 0 && B.first < 0);
    return _A != _B ? _A < _B : A * B > 0;
  });
  for (auto it : vec) {
    int a = it.first, b = it.second;
    swap(pos[a], pos[b]);
    swap(arr[pos[a]], arr[pos[b]]);
    auto f = [&](int c) { return (p[a] - p[b]) * (p[c] - p[b]); };
    int l = -1, r = n;
    while (r - l > 1) {
      int mid = (l + r) / 2;
      if (f(arr[mid]) < second)
        l = mid;
      else
        r = mid;
    }
    if (r != n && f(arr[r]) == second) print(a, b, arr[r]);
  }
  return cout << "No\n", 0;
}
