package main
import (
"bufio"
"fmt"
"os"
)
func abs(x int64) int64 {
if x < 0 {
return -x
}
return x
}
type Point struct {
x, y int64
}
func area2(p1, p2, p3 Point) int64 {
return abs((p2.x-p1.x)*(p3.y-p1.y) - (p3.x-p1.x)*(p2.y-p1.y))
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
var S int64
fmt.Fscan(reader, &n, &S)
pts := make([]Point, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &pts[i].x, &pts[i].y)
}
A := pts[0]
var B, C Point
for i := 1; i < n; i++ {
if pts[i].x != A.x || pts[i].y != A.y {
B = pts[i]
break
}
}
for i := 1; i < n; i++ {
if area2(A, B, pts[i]) > 0 {
C = pts[i]
break
}
}
for {
updated := false
maxA := A
maxArea := area2(A, B, C)
for i := 0; i < n; i++ {
if area2(pts[i], B, C) > maxArea {
maxArea = area2(pts[i], B, C)
maxA = pts[i]
updated = true
}
}
A = maxA
maxB := B
maxArea = area2(A, B, C)
for i := 0; i < n; i++ {
if area2(A, pts[i], C) > maxArea {
maxArea = area2(A, pts[i], C)
maxB = pts[i]
updated = true
}
}
B = maxB
maxC := C
maxArea = area2(A, B, C)
for i := 0; i < n; i++ {
if area2(A, B, pts[i]) > maxArea {
maxArea = area2(A, B, pts[i])
maxC = pts[i]
updated = true
}
}
C = maxC
if !updated {
break
}
}
res1 := Point{B.x + C.x - A.x, B.y + C.y - A.y}
res2 := Point{A.x + C.x - B.x, A.y + C.y - B.y}
res3 := Point{A.x + B.x - C.x, A.y + B.y - C.y}
fmt.Printf("%d %d\n%d %d\n%d %d\n", res1.x, res1.y, res2.x, res2.y, res3.x, res3.y)
}