#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
bool IsValid(int F,double fmax,vector<double> veccakev)
{
int F1=0;
for(int i=0;i<veccakev.size();i++)
{
F1=F1+(int)(veccakev[i]/fmax);
}
if(F1>=(F+1))
{
return true;
}
else
{
return false;
}
}
int main()
{
int N=0,F=0;
cin>>N>>F;
int icakenum=N;
vector<double> veccakev;
while((icakenum--)>0)
{
int r=0;
cin>>r;
veccakev.push_back(r*r*acos(-1.0));
}
//二分法
double fmin=0,fmax=0;
for(int i=0;i<veccakev.size();i++)
{
fmax+=veccakev[i];
}
fmax=fmax/(F+1);
double fvalue=(fmax+fmin)/2;
while((fmax-fmin)>1e-5)
{
if(IsValid(F,fvalue,veccakev))
{
fmin=fmin+(fmax-fmin)/2;
}
else
{
fmax=fmax-(fmax-fmin)/2;
}
fvalue=(fmax+fmin)/2;
}
printf("%.3lf\n",(fvalue));
return 0;
}