func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, S, top, pos[2005], id[2005];   struct point {     long long x, y;   } a[2005];   struct line {     long long x, y;     double k;   } b[4000005];   inline bool cmp1(point A, point B) {     return A.x != B.x ? A.x < B.x : A.y < B.y;   }   inline bool cmp2(line A, line B) { return A.k < B.k; }   inline long long cross(point A, point B) {     return abs((A.x * B.y) - (B.x * A.y));   }   inline point operator-(point A, point B) {     return (point){A.x - B.x, A.y - B.y};   }   inline long long getS(point A, point B, point C) {     return abs(cross(B - A, C - A));   }   inline long long read() {     long long ret = 0, ff = 1;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) ff = -1;       ch = getchar();     }     while (isdigit(ch)) {       ret = (ret << 3) + (ret << 1) + (ch ^ 48);       ch = getchar();     }     return ret * ff;   }   signed main() {     n = read();     S = read() * 2;     for (long long i = 1; i <= n; i++) {       a[i].x = read();       a[i].y = read();       pos[i] = id[i] = i;     }     sort(a + 1, a + n + 1, cmp1);     for (long long i = 1; i <= n; i++)       for (long long j = i + 1; j <= n; j++)         b[++top] =             (line){i, j, atan2((double)(a[j] - a[i]).y, (double)(a[j] - a[i]).x)};     sort(b + 1, b + top + 1, cmp2);     for (long long i = 1; i <= top; i++) {       long long x = b[i].x, y = b[i].y;       if (pos[x] > pos[y]) swap(x, y);       long long l, r, t;       l = 1, r = pos[x] - 1;       while (l <= r) {         long long mid = (l + r) >> 1;         if (getS(a[id[mid]], a[x], a[y]) >= S)           l = mid + 1, t = mid;         else           r = mid - 1;       }       if (getS(a[id[t]], a[x], a[y]) == S) {         puts( Yes );         printf( %lld %lld n , a[id[t]].x, a[id[t]].y);         printf( %lld %lld n , a[x].x, a[x].y);         printf( %lld %lld n , a[y].x, a[y].y);         return 0;       }       l = pos[y] + 1, r = n;       while (l <= r) {         long long mid = (l + r) >> 1;         if (getS(a[id[mid]], a[x], a[y]) >= S)           r = mid - 1, t = mid;         else           l = mid + 1;       }       if (getS(a[id[t]], a[x], a[y]) == S) {         puts( Yes );         printf( %lld %lld n , a[id[t]].x, a[id[t]].y);         printf( %lld %lld n , a[x].x, a[x].y);         printf( %lld %lld n , a[y].x, a[y].y);         return 0;       }       swap(pos[x], pos[y]);       swap(id[pos[x]], id[pos[y]]);     }     printf( No );     return 0;   }   