//半平面交,然后求凸包对重点
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define eps 1e-8
#define dist(a,b) sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))
#define cross(a,b,c) (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x)
#define dot(a,b,c) (b.x-a.x)*(c.x-a.x)+(b.y-a.y)*(c.y-a.y)
#define delt(a) fabs(a)<eps?0:a>0?1:-1
#define N 1005
#define inf 1e20
using namespace std;
struct TPoint
{
double x,y;
}pt[N],st,mid[N];
int n,m,t,end;
double radius;
bool scan()//输入
{
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&pt[i].x,&pt[i].y);
}
return 1;
}
bool cmp(TPoint a,TPoint b)
{
return a.x<b.x||(a.x==b.x&&a.y<b.y);
}
bool ncmp(TPoint a,TPoint b)
{
int d1=delt(cross(pt[0],a,b));
return d1>0||(d1==0&&dist(pt[0],a)<dist(pt[0],b));
}
void getmove(TPoint &a,TPoint &b,double r)
{
TPoint ms;
ms.x=a.y-b.y,ms.y=b.x-a.x;
double k=r/dist(a,b);
a.x+=ms.x*k,a.y+=ms.y*k;
b.x+=ms.x*k,b.y+=ms.y*k;
}
void cut(TPoint ans[],TPoint s,TPoint e,int &np)
{
getmove(s,e,radius);
double s1,s2;
int i,j,d1,d2;
for(i=j=0;i<np;i++)
{
s1=cross(ans[i],s,e),s2=cross(ans[i+1],s,e);
d1=delt(s1),d2=delt(s2);
if(d1>=0) ans[j++]=ans[i];
if(d1*d2<0)
{
ans[j].x=(s2*ans[i].x-s1*ans[i+1].x)/(s2-s1);
ans[j++].y=(s2*ans[i].y-s1*ans[i+1].y)/(s2-s1);
}
}
ans[j]=ans[0];
np=j;
}
void solve()
{
sort(pt,pt+n,cmp);
sort(pt,pt+n,ncmp);
int i,j,k,maxl=0;
TPoint ans[N],a,b;
pt[n]=pt[0];
for(i=0;i<=n;i++) ans[i]=pt[i];
for(i=0,m=n;i<n;i++)
cut(ans,pt[i],pt[i+1],m);
if(m==1) a=b=ans[0];
else if(m==2) a=ans[0],b=ans[1];
else
{
double maxl=0,l;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
l=dist(ans[i],ans[j]);
if(l-maxl>eps)
{
maxl=l,a=ans[i],b=ans[j];
}
}
}
}
printf("%.4f %.4f %.4f %.4f\n",a.x,a.y,b.x,b.y);
}
int main()
{
while(scanf("%d%lf",&n,&radius)!=EOF)
{
scan();
solve();
}
return 0;
}