// ███▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓╬╬╬╬╬╬▓█
// ███▓███████▓▓╬╬╬╬╬╬╬╬╬╬╬╬▓███▓▓▓▓█▓╬╬╬▓█
// ███████▓█████▓▓╬╬╬╬╬╬╬╬▓███▓╬╬╬╬╬╬╬▓╬╬▓█
// ████▓▓▓▓╬╬▓█████╬╬╬╬╬╬███▓╬╬╬╬╬╬╬╬╬╬╬╬╬█
// ███▓▓▓▓╬╬╬╬╬╬▓██╬╬╬╬╬╬▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
// ████▓▓▓╬╬╬╬╬╬╬▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
// ███▓█▓███████▓▓███▓╬╬╬╬╬╬▓███████▓╬╬╬╬▓█
// ████████████████▓█▓╬╬╬╬╬▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬█
// ███▓▓▓▓▓▓▓╬╬▓▓▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
// ████▓▓▓╬╬╬╬▓▓▓▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
// ███▓█▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
// █████▓▓▓▓▓▓▓▓█▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
// █████▓▓▓▓▓▓▓██▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
// █████▓▓▓▓▓████▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
// ████▓█▓▓▓▓██▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
// ████▓▓███▓▓▓▓▓▓▓██▓╬╬╬╬╬╬╬╬╬╬╬╬█▓╬▓╬╬▓██
// █████▓███▓▓▓▓▓▓▓▓████▓▓╬╬╬╬╬╬╬█▓╬╬╬╬╬▓██
// █████▓▓█▓███▓▓▓████╬▓█▓▓╬╬╬▓▓█▓╬╬╬╬╬╬███
// ██████▓██▓███████▓╬╬╬▓▓╬▓▓██▓╬╬╬╬╬╬╬▓███
// ███████▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬████
// ███████▓▓██▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓████
// ████████▓▓▓█████▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█████
// █████████▓▓▓█▓▓▓▓▓███▓╬╬╬╬╬╬╬╬╬╬╬▓██████
// ██████████▓▓▓█▓▓▓╬▓██╬╬╬╬╬╬╬╬╬╬╬▓███████
// ███████████▓▓█▓▓▓▓███▓╬╬╬╬╬╬╬╬╬▓████████
// ██████████████▓▓▓███▓▓╬╬╬╬╬╬╬╬██████████
// ███████████████▓▓▓██▓▓╬╬╬╬╬╬▓███████████
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
// #pragma GCC optimize("unroll-loops")
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cmath>
#include <bitset>
#include <cassert>
#include <queue>
#include <deque>
#include <cassert>
#include <iomanip>
#include <chrono>
#define pb push_back
#define x first
#define y second
#define mp make_pair
#define files(FILENAME) read(FILENAME); write(FILENAME)
#define read(FILENAME) freopen((string(FILENAME) + ".in").c_str(), "r", stdin)
#define write(FILENAME) freopen((string(FILENAME) + ".out").c_str(), "w", stdout)
using namespace std;

template<typename T1, typename T2>inline void chkmin(T1 &x, T2 y) { if (x > y) x = y; }
template<typename T1, typename T2>inline void chkmax(T1 &x, T2 y) { if (x < y) x = y; }
template<typename T, typename U> inline ostream &operator<< (ostream &_out, const pair<T, U> &_p) { _out << _p.first << ' ' << _p.second; return _out; }
template<typename T, typename U> inline istream &operator>> (istream &_in, pair<T, U> &_p) { _in >> _p.first >> _p.second; return _in; }
template<typename T> inline ostream &operator<< (ostream &_out, const vector<T> &_v) { if (_v.empty()) { return _out; } _out << _v.front(); for (auto _it = ++_v.begin(); _it != _v.end(); ++_it) { _out << ' ' << *_it; } return _out; }
template<typename T> inline istream &operator>> (istream &_in, vector<T> &_v) { for (auto &_i : _v) { _in >> _i; } return _in; }
template<typename T> inline ostream &operator<< (ostream &_out, const set<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
template<typename T> inline ostream &operator<< (ostream &_out, const multiset<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
template<typename T> inline ostream &operator<< (ostream &_out, const unordered_set<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
template<typename T> inline ostream &operator<< (ostream &_out, const unordered_multiset<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
template<typename T, typename U> inline ostream &operator<< (ostream &_out, const map<T, U> &_m) { if (_m.empty()) { return _out; } _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) { _out << ", (" << _it->first << ": " << _it->second << ')'; } return _out; }
template<typename T, typename U> inline ostream &operator<< (ostream &_out, const unordered_map<T, U> &_m) { if (_m.empty()) { return _out; } _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) { _out << ", (" << _it->first << ": " << _it->second << ')'; } return _out; }

typedef long double base;
typedef pair<long long, long long> point;

point operator - (point a, point b) {
    return {a.x - b.x, a.y - b.y};
}

long long operator * (point a, point b) {
    return a.x * b.y - a.y * b.x;
}

base len(point a) {
    return hypot(a.x, a.y);
}

int n;
long long s;
vector<point> a;

long double dist(point a, point b, point c) {
    long double s = (a - b) * (c - b);
    return s / len(a - b);
}

int p[2001];
vector<int> ord;

bool cmp(point i, point j) {
    return (a[i.y] - a[i.x]) * (a[i.y] - a[i.x]) < 0;
}

vector<point> que;
point cent;

bool cmp_first(int i, int j) {
    return dist(a[cent.x], a[cent.y], a[i]) < dist(a[cent.x], a[cent.y], a[j]);
}

void find(point A, point B, long long s) {
    int L = -1, R = ord.size();
    while (R - L > 1) {
        int M = (L + R) >> 1;
        point C = a[ord[M]];
        long long curs = (A - B) * (C - B);
        if (curs == s) {
            cout << "Yes\n";
            cout << A << '\n' << B << '\n' << C << '\n';
            exit(0);
        }
        if (curs < s) {
            L = M;
        } else {
            R = M;
        }
    }
}

int main() {
    ios::sync_with_stdio(0);
    srand(time(0));
    //read("input");
    cin >> n >> s;
    s <<= 1;
    a.resize(n);
    cin >> a;
    sort(a.begin(), a.end());
    for (int i = 0; i < n; ++i) {
        ord.pb(i);
        for (int j = i + 1; j < n; ++j) {
            que.pb({i, j});
        }
    }
    sort(que.begin(), que.end(), cmp);
    cent = que[0];
    sort(ord.begin(), ord.end(), cmp_first);
    for (int i = 0; i < n; ++i) {
        p[ord[i]] = i;
    }
    for (int i = 0; i < que.size(); ++i) {
        auto c = que[i];
        find(a[c.x], a[c.y], s);
        find(a[c.x], a[c.y], -s);
        if (i + 1 == que.size()) break;
        auto d = que[i + 1];
        if (p[c.x] > p[c.y] ^ dist(a[d.x], a[d.y], a[c.x]) < dist(a[d.x], a[d.y], a[c.y])) {
            swap(p[c.x], p[c.y]);
            swap(ord[p[c.x]], ord[p[c.y]]);
        }
    }
    cout << "No\n";
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	if (vx1 < 0 && vx2 >= 0) return false;
	if (vx1 >= 0 && vx2 < 0) return true;
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now < 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	if (vx1 < 0 && vx2 >= 0) return false;
	if (vx1 >= 0 && vx2 < 0) return true;
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    assert(abs(pos[i] - pos[j]) == 1);
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	if (vx1 < 0 && vx2 >= 0) return true;
	if (vx1 >= 0 && vx2 < 0) return false;
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	if (vx1 < 0 && vx2 >= 0) return true;
	if (vx1 >= 0 && vx2 < 0) return false;
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now < 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        for (int u = l - 10; u <= l + 10; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        for (int u = l - 10; u <= l + 10; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	if (vx1 < 0 && vx2 >= 0) return false;
	if (vx1 >= 0 && vx2 < 0) return true;
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        change(xq, yq);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	if (vx1 < 0 && vx2 >= 0) return true;
	if (vx1 >= 0 && vx2 < 0) return false;
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        x = -x;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
        {
            y = -y;
            x = -x;
        }
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	if ((ll)vx2 * (ll)vy1 == (ll)vx1 * (ll)vy2) return (a < b);
	return ((ll)vx2 * (ll)vy1 < (ll)vx1 * (ll)vy2);
}

inline void change(int i, int j)
{
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        for (int u = l - 1; u <= l + 1; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        for (int u = l - 1; u <= l + 1; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    assert((id[pos[i]] == i && id[pos[j]] == j));
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
    assert((id[pos[i]] == j && id[pos[j]] == i));
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        change(xq, yq);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	if (vx1 < 0 && vx2 >= 0) return false;
	if (vx1 >= 0 && vx2 < 0) return true;
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        change(xq, yq);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) >= s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) <= s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 4e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int, bool> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;

inline bool cmp(tuple<int, int, bool> a, tuple<int, int, bool> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	if (!get<2>(a)) vx1 *= -1;
	if (!get<2>(b)) vx2 *= -1;
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	return ((ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1 > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j, true);
            cur++;
            ask[cur] = make_tuple(i, j, false);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<pair<int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_pair(y[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = al[i].second;
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int t = 0; t < n; t++)
        //    cerr << id[t] << " ";
        //cerr << "!\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        if (get<2>(ask[i]))
        {
            l = -1;
            r = pos[xq];
            while (r - l > 1)
            {
                int h = (l + r) / 2;
                if (gett(xq, yq, id[h]) > s)
                    l = h;
                else
                    r = h;
            }
            if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
            if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
            l = pos[xq];
            r = n;
            while (r - l > 1)
            {
                int h = (l + r) / 2;
                if (gett(xq, yq, id[h]) < s)
                    l = h;
                else
                    r = h;
            }
            if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
            if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        }
        else
            change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (ll)(vx1 * vy2) - (ll)(vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

int vx1, vy1, vx2, vy2;
ll now;

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	vx1 = x[get<1>(a)] - x[get<0>(a)];
	vy1 = y[get<1>(a)] - y[get<0>(a)];
	vx2 = x[get<1>(b)] - x[get<0>(b)];
	vy2 = y[get<1>(b)] - y[get<0>(b)];
	if (vx1 < 0 && vx2 >= 0) return false;
	if (vx1 >= 0 && vx2 < 0) return true;
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
	swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        //for (int u = 0; u < n; u++)
        //    cerr << id[u] + 1 << " ";
        //cerr << "<-list\n";
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        //for (int t = 0; t < n; t++)
        //    cerr << gett(id[t], xq, yq) << " ";
        //cerr << "!\n";
        //cerr << (xq + 1) << " " << (yq + 1) << "!\n";
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (l >= 0 && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r >= 0 && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (l < n && gett(xq, yq, id[l]) == s) answer(xq, yq, id[l]);
        if (r < n && gett(xq, yq, id[r]) == s) answer(xq, yq, id[r]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


/*
    Author: isaf27 (Ivan Safonov)
*/

#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

//defines
typedef long long ll;
typedef double ld;
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
#define fastIO ios_base::sync_with_stdio(0)
#define nul point(0, 0)
#define str_to_int(stroka) atoi(stroka.c_str())
#define str_to_ll(stroka) atoll(stroka.c_str())
#define str_to_double(stroka) atof(stroka.c_str())
#define what_is(x) cerr << #x << " is " << x << endl
#define solve_system int number; cin >> number; for (int i = 0; i < number; i++) solve()
#define solve_system_scanf int number; scanf("%d", &number); for (int i = 0; i < number; i++) solve()

//permanent constants
const ld pi = 3.141592653589793238462643383279;
const ld log23 = 1.58496250072115618145373894394781;
const ld eps = 1e-8;
const ll INF = 1e18 + 239;
const ll prost = 239;
const int two = 2;
const int th = 3;
const ll MOD = 1e9 + 7; // 998244353
const ll MOD2 = MOD * MOD;
const int BIG = 1e9 + 239;
const int alf = 26;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int dxo[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dyo[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dig = 10;
const string str_alf = "abcdefghijklmnopqrstuvwxyz";
const string str_alf_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int digarr[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
const int bt = 31;
const int fr = 4;

//easy functions
template< typename T >
inline T gcd(T a, T b) { return a ? gcd(b % a, a) : b; }
template< typename T >
inline T lcm(T a, T b) { return (a / gcd(a, b)) * b; }
inline bool is_down(char x) { return ('a' <= x && x <= 'z'); }
inline bool is_upper(char x) { return ('A' <= x && x <= 'Z'); }
inline bool is_digit(char x) { return ('0' <= x && x <= '9'); }
inline int power(ll a, int b)
{
    ll res = 1;
    while (b > 0)
    {
        if (b & 1) res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}

//random
mt19937 rnd(239);

//constants
const int M = 2 * 1e5 + 239;
const int N = 2 * 1e3 + 239;
const int L = 19;
const int T = (1 << 20);
const int B = trunc(sqrt(M)) + 1;
const int X = 2e6 + 239;

int n, x[N], y[N], cur, id[N], pos[N];
ll s;
tuple<int, int> ask[X];

ll gett(int i, int j, int h)
{
    ll vx1 = x[j] - x[i];
    ll vy1 = y[j] - y[i];
    ll vx2 = x[h] - x[i];
    ll vy2 = y[h] - y[i];
    ll sq = (vx1 * vy2 - vx2 * vy1);
    return abs(sq);
}

void answer(int i, int j, int h)
{
    cout << "Yes\n";
    cout << x[i] << " " << y[i] << "\n";
    cout << x[j] << " " << y[j] << "\n";
    cout << x[h] << " " << y[h] << "\n";
    exit(0);
}

void reinit(int &x, int &y)
{
    if (y < 0)
    {
        y = -y;
        return;
    }
    if (y == 0)
    {
        if (x < 0)
            x = -x;
    }
}

inline bool cmp(tuple<int, int> a, tuple<int, int> b)
{
	int vx1 = x[get<1>(a)] - x[get<0>(a)];
	int vy1 = y[get<1>(a)] - y[get<0>(a)];
	int vx2 = x[get<1>(b)] - x[get<0>(b)];
	int vy2 = y[get<1>(b)] - y[get<0>(b)];
	reinit(vx1, vy1);
	reinit(vx2, vy2);
	ll now = (ll)vx1 * (ll)vy2 - (ll)vx2 * (ll)vy1;
	if (now == 0) return (a < b);
	return (now > 0LL);
}

inline void change(int i, int j)
{
    assert((id[pos[i]] == i && id[pos[j]] == j));
    swap(id[pos[i]], id[pos[j]]);
    swap(pos[i], pos[j]);
    assert((id[pos[i]] == i && id[pos[j]] == j));
}

int main()
{
    #ifdef ONPC
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    fastIO;
    cin >> n >> s;
    s *= 2LL;
    cur = 0;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
        {
            ask[cur] = make_tuple(i, j);
            cur++;
        }
    sort(ask, ask + cur, cmp);
    vector<tuple<int, int, int> > al;
    for (int i = 0; i < n; i++)
        al.push_back(make_tuple(y[i], x[i], i));
    sort(al.begin(), al.end());
    for (int i = 0; i < n; i++)
        id[i] = get<2>(al[i]);
    for (int i = 0; i < n; i++)
        pos[id[i]] = i;
    int xq, yq, l, r;
    for (int i = 0; i < cur; i++)
    {
        xq = get<0>(ask[i]);
        yq = get<1>(ask[i]);
        l = -1;
        r = pos[xq];
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) > s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        l = pos[xq];
        r = n;
        while (r - l > 1)
        {
            int h = (l + r) / 2;
            if (gett(xq, yq, id[h]) < s)
                l = h;
            else
                r = h;
        }
        if (r - l > 1) exit(239);
        for (int u = l - 3; u <= l + 3; u++)
            if (0 <= u && u < n && gett(xq, yq, id[u]) == s)
                answer(xq, yq, id[u]);
        change(xq, yq);
    }
    cout << "No\n";
    return 0;
}


#include <bits/stdc++.h>
#define err(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#pragma GCC optimize "-O3"

using namespace std;

typedef long long ll;

const int dd = static_cast<int>(2e3) + 7;

int x[dd], y[dd];

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	ll ans;
	int n; cin >> n >> ans;
	ans *= 2;
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];

	for (int i = 0; i < n; i++) {

		for (int j = 0; j < i; j++) x[j] -= x[i], y[j] -= y[i];

		for (int j = 0; j < i; j++) {
			for (int k = 0; k < j; k++) {
				ll cur = 1ll * x[j] * y[k] - 1ll * y[j] * x[k];
				if (ans == cur || ans == -cur) {
					cout << "Yes\n";
					cout << x[i] << " " << y[i] << "\n";
					cout << x[j] + x[i] << " " << y[j] + y[i] << "\n";
					cout << x[k] + x[i] << " " << y[k] + y[i] << "\n";
					return 0;
				}
			}
		}

		for (int j = 0; j < i; j++) x[j] += x[i], y[j] += y[i];
	}
	cout << "No\n";
	return 0;
}