#include <bits/stdc++.h>
using namespace std;
void printPoint(const pair<long long, long long>& p) {
  cout << p.first << " " << p.second << "\n";
}
inline void printSolution(vector<pair<long long, long long> > triangle) {
  cout << "Yes\n";
  for (pair<long long, long long> point : triangle) {
    cout << point.first << " " << point.second << "\n";
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int numPoints;
  long long desiredArea;
  cin >> numPoints >> desiredArea;
  long long desiredDoubledArea = 2 * desiredArea;
  vector<pair<long long, long long> > points;
  for (int i = 0; i != numPoints; ++i) {
    long long x, y;
    cin >> x >> y;
    points.push_back(pair<long long, long long>(x, y));
  }
  sort(points.begin(), points.end());
  vector<pair<pair<long long, long long>, pair<long long, long long> > > slopes;
  for (int i = 0; i != points.size(); ++i) {
    for (int j = i + 1; j != points.size(); ++j) {
      slopes.push_back(make_pair(points[i], points[j]));
    }
  }
  sort(slopes.begin(), slopes.end(),
       [](const pair<pair<long long, long long>, pair<long long, long long> >&
              slope1,
          const pair<pair<long long, long long>, pair<long long, long long> >&
              slope2) {
         long long x1 = slope1.second.first - slope1.first.first;
         long long y1 = slope1.second.second - slope1.first.second;
         long long x2 = slope2.second.first - slope2.first.first;
         long long y2 = slope2.second.second - slope2.first.second;
         return y1 * x2 < y2 * x1;
       });
  map<pair<long long, long long>, int> order;
  for (int i = 0; i != points.size(); ++i) order[points[i]] = i;
  for (pair<pair<long long, long long>, pair<long long, long long> > slope :
       slopes) {
    pair<long long, long long> p1 = slope.first;
    pair<long long, long long> p2 = slope.second;
    int& pos1 = order[p1];
    int& pos2 = order[p2];
    int begin, end;
    begin = 0;
    end = pos1;
    while (begin != end) {
      int mid = (begin + end) / 2;
      pair<long long, long long> p3 = points[mid];
      long long value = abs(p1.first * p2.second - p1.second * p2.first +
                            p2.first * p3.second - p2.second * p3.first +
                            p3.first * p1.second - p3.second * p1.first);
      if (value == desiredDoubledArea) {
        printSolution({p1, p2, p3});
        return 0;
      } else if (value > desiredDoubledArea) {
        begin = mid + 1;
      } else {
        end = mid;
      }
    }
    begin = pos2 + 1;
    end = points.size();
    while (begin != end) {
      int mid = (begin + end) / 2;
      pair<long long, long long> p3 = points[mid];
      long long value = abs(p1.first * p2.second - p1.second * p2.first +
                            p2.first * p3.second - p2.second * p3.first +
                            p3.first * p1.second - p3.second * p1.first);
      if (value == desiredDoubledArea) {
        printSolution({p1, p2, p3});
        return 0;
      }
      if (value < desiredDoubledArea) {
        begin = mid + 1;
      } else {
        end = mid;
      }
    }
    swap(points[pos1], points[pos2]);
    swap(pos1, pos2);
  }
  cout << "No\n";
}
