/// Google Code Jam 2017 Round 1C Problem A
/// Bismillahir Rahmanir Rahim
/// S. M. Shakir Ahsan Romeo ( Pure_Protea, #theromeo421, Cosmos_Freak )
/// CSE Discipline, Khulna University, Khulna
/// Monirampur, Jessore.
#include <bits/stdc++.h>
using namespace std;
typedef long long lng;
typedef vector < int > vi;
typedef vector < lng > vl;
typedef pair < int, int > pii;
typedef vector < pii > vpii;
const int inf = 1 << 30;
const long long linf = 1LL << 62;
const double PI = acos(-1.0), dinf = (double)(1LL << 62), eps = (double)(1e-9);
double distance(double x1, double y1, double x2, double y2)
{
x1 -= x2;
y1 -= y2;
return sqrt(x1 * x1 + y1 * y1);
}
long long POW(long long b, long long p)
{
if(p == 0)
return 1;
long long t = POW(b, p >> 1);
if(p & 1)
return t * t * b;
return t * t;
}
long long bigmod(long long b, long long p, long long m)
{
if(p == 0)
return 1;
long long t = POW(b, p >> 1) % m;
t = (t * t) % m;
if(p & 1)
t = (t * b) % m;
return t;
}
inline int getint()
{
int x;
scanf("%d", &x);
return x;
}
inline long long getlng()
{
long long x;
scanf("%lld", &x);
return x;
}
lng gcd(lng a, lng b)
{
return !b ? a : gcd(b, a % b);
}
lng lcm(lng a, lng b)
{
return (a / gcd(a, b)) * b;
}
int dx4[] = {-1, 0, 1, 0};
int dy4[] = {0, 1, 0, -1};
int dx8[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy8[] = {-1, 0, 1, -1, 1, -1, 0, 1};
#define theromeo421 main()
#define segtree int lft = node << 1, rgt = lft | 1, mid = (b + e) >> 1;
#define mem(x, y) memset(x, y, sizeof x);
#define II getint()
#define LL getlng()
#define sz(x) ((int)x.size())
#define sqr(x) ((x) * (x))
#define max3(a,b,c) max(a, max(b,c))
#define min3(a,b,c) min(a, min(b,c))
#define pr1(x) cout << x << endl
#define pr2(x,y) cout << x << ' ' << y << endl
#define pr3(x,y,z) cout << x << ' ' << y << ' ' << z << endl
#define pr4(a,b,c,d) cout << a << ' ' << b << ' ' << c << ' ' << d << endl
#define rep(i, n) for(int i = 0; i < n; ++i)
#define rep1(i, n) for(int i = 1; i <= n; ++i)
#define repab(i, a, b) for(int i = a; i <= b; ++i)
#define repstl(it, x) for(auto it = x.begin(); it != x.end(); it++)
#define repbstl(it, x) for(auto it = x.rbegin(); it != x.rend(); it++)
#define forch(it, x) for(auto it : x)
#define pb push_back
#define all(x) x.begin(), x.end()
#define xx first
#define yy second
#define dbg(x) cerr << #x << " : " << x << endl;
#define read(a) freopen(a, "r", stdin);
#define write(a) freopen(a, "w", stdout);
#define prv(v) rep(i, v.size()) cout << v[i] << " \n"[i + 1 == v.size()];
#define prmp(x) repstl(it, x) pr2(it->xx, it->yy)
#define pause int ppause; cin >> ppause;
#define pf printf
#define sf scanf
void IO()
{
read("A-large.in");
write("out.txt");
}
void solve();
int theromeo421
{
//IO();
int T = II;
cerr << T << " Case(s) need to be solved" << endl;
rep1(cas, T)
{
printf("Case #%d: ", cas);
solve();
cerr << "Case " << cas << " solved" << endl;
}
cerr << "Done" << endl;
return 0;
}
const int N = 1010;
int n, k;
bool vis[N][N];
double dp[N][N];
struct data
{
double r = 0, h = 0;
data() {}
data(double a, double b)
{
r = a;
h = b;
}
bool operator < (const data& DT) const
{
return r > DT.r;
}
};
vector < data > D;
double call(int i, int K)
{
if(i > n)
{
if(K == k)
return 0;
return -dinf;
}
if(vis[i][K])
return dp[i][K];
vis[i][K] = true;
if(K == 0)
{
double p1 = PI * D[i].r * D[i].r + 2.0 * PI * D[i].r * D[i].h + call(i + 1, 1);
double p2 = call(i + 1, 0);
return dp[i][K] = max(p1, p2);
}
else
{
if(K < k)
{
double p1 = 2.0 * PI * D[i].r * D[i].h + call(i + 1, K + 1);
double p2 = call(i + 1, K);
return dp[i][K] = max(p1, p2);
}
else
{
return dp[i][K] = 0;
}
}
}
void solve()
{
n = II;
k = II;
mem(vis, false);
D.resize(n + 1);
rep1(i, n)
{
double a, b;
cin >> a >> b;
D[i] = data(a, b);
}
sort(D.begin() + 1, D.end());
printf("%0.10f\n", call(1, 0));
}
Ly8vIEdvb2dsZSBDb2RlIEphbSAyMDE3IFJvdW5kIDFDIFByb2JsZW0gQQoKLy8vIEJpc21pbGxhaGlyIFJhaG1hbmlyIFJhaGltCi8vLyBTLiBNLiBTaGFraXIgQWhzYW4gUm9tZW8gKCBQdXJlX1Byb3RlYSwgI3RoZXJvbWVvNDIxLCBDb3Ntb3NfRnJlYWsgKQovLy8gQ1NFIERpc2NpcGxpbmUsIEtodWxuYSBVbml2ZXJzaXR5LCBLaHVsbmEKLy8vIE1vbmlyYW1wdXIsIEplc3NvcmUuCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxuZzsKdHlwZWRlZiB2ZWN0b3IgPCBpbnQgPiAgdmk7CnR5cGVkZWYgdmVjdG9yIDwgbG5nID4gIHZsOwp0eXBlZGVmIHBhaXIgPCBpbnQsIGludCA+ICBwaWk7CnR5cGVkZWYgdmVjdG9yIDwgcGlpID4gIHZwaWk7Cgpjb25zdCBpbnQgaW5mID0gMSA8PCAzMDsKY29uc3QgbG9uZyBsb25nIGxpbmYgPSAxTEwgPDwgNjI7CmNvbnN0IGRvdWJsZSBQSSA9IGFjb3MoLTEuMCksIGRpbmYgPSAoZG91YmxlKSgxTEwgPDwgNjIpLCBlcHMgPSAoZG91YmxlKSgxZS05KTsKCmRvdWJsZSBkaXN0YW5jZShkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCnsKICAgIHgxIC09IHgyOwogICAgeTEgLT0geTI7CiAgICByZXR1cm4gc3FydCh4MSAqIHgxICsgeTEgKiB5MSk7Cn0KbG9uZyBsb25nIFBPVyhsb25nIGxvbmcgYiwgbG9uZyBsb25nIHApCnsKICAgIGlmKHAgPT0gMCkKICAgICAgICByZXR1cm4gMTsKICAgIGxvbmcgbG9uZyB0ID0gUE9XKGIsIHAgPj4gMSk7CiAgICBpZihwICYgMSkKICAgICAgICByZXR1cm4gdCAqIHQgKiBiOwogICAgcmV0dXJuIHQgKiB0Owp9CmxvbmcgbG9uZyBiaWdtb2QobG9uZyBsb25nIGIsIGxvbmcgbG9uZyBwLCBsb25nIGxvbmcgbSkKewogICAgaWYocCA9PSAwKQogICAgICAgIHJldHVybiAxOwogICAgbG9uZyBsb25nIHQgPSBQT1coYiwgcCA+PiAxKSAlIG07CiAgICB0ID0gKHQgKiB0KSAlIG07CiAgICBpZihwICYgMSkKICAgICAgICB0ID0gKHQgKiBiKSAlIG07CiAgICByZXR1cm4gdDsKfQppbmxpbmUgaW50IGdldGludCgpCnsKICAgIGludCB4OwogICAgc2NhbmYoIiVkIiwgJngpOwogICAgcmV0dXJuIHg7Cn0KaW5saW5lIGxvbmcgbG9uZyBnZXRsbmcoKQp7CiAgICBsb25nIGxvbmcgeDsKICAgIHNjYW5mKCIlbGxkIiwgJngpOwogICAgcmV0dXJuIHg7Cn0KCmxuZyBnY2QobG5nIGEsIGxuZyBiKQp7CiAgICByZXR1cm4gIWIgPyBhIDogZ2NkKGIsIGEgJSBiKTsKfQoKbG5nIGxjbShsbmcgYSwgbG5nIGIpCnsKICAgIHJldHVybiAoYSAvIGdjZChhLCBiKSkgKiBiOwp9CgppbnQgZHg0W10gPSB7LTEsIDAsIDEsIDB9OwppbnQgZHk0W10gPSB7MCwgMSwgMCwgLTF9OwppbnQgZHg4W10gPSB7LTEsIC0xLCAtMSwgMCwgMCwgMSwgMSwgMX07CmludCBkeThbXSA9IHstMSwgMCwgMSwgLTEsIDEsIC0xLCAwLCAxfTsKCiNkZWZpbmUgdGhlcm9tZW80MjEgbWFpbigpCiNkZWZpbmUgc2VndHJlZSBpbnQgbGZ0ID0gbm9kZSA8PCAxLCByZ3QgPSBsZnQgfCAxLCBtaWQgPSAoYiArIGUpID4+IDE7CiNkZWZpbmUgbWVtKHgsIHkpIG1lbXNldCh4LCB5LCBzaXplb2YgeCk7CiNkZWZpbmUgSUkgZ2V0aW50KCkKI2RlZmluZSBMTCBnZXRsbmcoKQojZGVmaW5lIHN6KHgpICgoaW50KXguc2l6ZSgpKQojZGVmaW5lIHNxcih4KSAoKHgpICogKHgpKQojZGVmaW5lIG1heDMoYSxiLGMpIG1heChhLCBtYXgoYixjKSkKI2RlZmluZSBtaW4zKGEsYixjKSBtaW4oYSwgbWluKGIsYykpCiNkZWZpbmUgcHIxKHgpIGNvdXQgPDwgeCA8PCBlbmRsCiNkZWZpbmUgcHIyKHgseSkgY291dCA8PCB4IDw8ICcgJyA8PCB5IDw8IGVuZGwKI2RlZmluZSBwcjMoeCx5LHopIGNvdXQgPDwgeCA8PCAnICcgPDwgeSA8PCAnICcgPDwgeiA8PCBlbmRsCiNkZWZpbmUgcHI0KGEsYixjLGQpIGNvdXQgPDwgYSA8PCAnICcgPDwgYiA8PCAnICcgPDwgYyA8PCAnICcgPDwgZCA8PCBlbmRsCiNkZWZpbmUgcmVwKGksIG4pIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiNkZWZpbmUgcmVwMShpLCBuKSBmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKI2RlZmluZSByZXBhYihpLCBhLCBiKSBmb3IoaW50IGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSByZXBzdGwoaXQsIHgpIGZvcihhdXRvIGl0ID0geC5iZWdpbigpOyBpdCAhPSB4LmVuZCgpOyBpdCsrKQojZGVmaW5lIHJlcGJzdGwoaXQsIHgpIGZvcihhdXRvIGl0ID0geC5yYmVnaW4oKTsgaXQgIT0geC5yZW5kKCk7IGl0KyspCiNkZWZpbmUgZm9yY2goaXQsIHgpIGZvcihhdXRvIGl0IDogeCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgeHggZmlyc3QKI2RlZmluZSB5eSBzZWNvbmQKI2RlZmluZSBkYmcoeCkgY2VyciA8PCAjeCA8PCAiIDogICIgPDwgeCA8PCBlbmRsOwojZGVmaW5lIHJlYWQoYSkgZnJlb3BlbihhLCAiciIsIHN0ZGluKTsKI2RlZmluZSB3cml0ZShhKSBmcmVvcGVuKGEsICJ3Iiwgc3Rkb3V0KTsKI2RlZmluZSBwcnYodikgcmVwKGksIHYuc2l6ZSgpKSBjb3V0IDw8IHZbaV0gPDwgIiBcbiJbaSArIDEgPT0gdi5zaXplKCldOwojZGVmaW5lIHBybXAoeCkgcmVwc3RsKGl0LCB4KSBwcjIoaXQtPnh4LCBpdC0+eXkpCiNkZWZpbmUgcGF1c2UgaW50IHBwYXVzZTsgY2luID4+IHBwYXVzZTsKI2RlZmluZSBwZiBwcmludGYKI2RlZmluZSBzZiBzY2FuZgoKCgp2b2lkIElPKCkKewogICAgcmVhZCgiQS1sYXJnZS5pbiIpOwogICAgd3JpdGUoIm91dC50eHQiKTsKfQoKdm9pZCBzb2x2ZSgpOwoKaW50IHRoZXJvbWVvNDIxCnsKICAgIC8vSU8oKTsKCiAgICBpbnQgVCA9IElJOwogICAgY2VyciA8PCBUIDw8ICIgQ2FzZShzKSBuZWVkIHRvIGJlIHNvbHZlZCIgPDwgZW5kbDsKICAgIHJlcDEoY2FzLCBUKQogICAgewogICAgICAgIHByaW50ZigiQ2FzZSAjJWQ6ICIsIGNhcyk7CiAgICAgICAgc29sdmUoKTsKICAgICAgICBjZXJyIDw8ICJDYXNlICIgPDwgY2FzIDw8ICIgc29sdmVkIiA8PCBlbmRsOwogICAgfQogICAgY2VyciA8PCAiRG9uZSIgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cgpjb25zdCBpbnQgTiA9IDEwMTA7CmludCBuLCBrOwpib29sIHZpc1tOXVtOXTsKZG91YmxlIGRwW05dW05dOwoKc3RydWN0IGRhdGEKewogICAgZG91YmxlIHIgPSAwLCBoID0gMDsKICAgIGRhdGEoKSB7fQogICAgZGF0YShkb3VibGUgYSwgZG91YmxlIGIpCiAgICB7CiAgICAgICAgciA9IGE7CiAgICAgICAgaCA9IGI7CiAgICB9CiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IGRhdGEmIERUKSBjb25zdAogICAgewogICAgICAgIHJldHVybiByID4gRFQucjsKICAgIH0KfTsKCnZlY3RvciA8IGRhdGEgPiBEOwoKZG91YmxlIGNhbGwoaW50IGksIGludCBLKQp7CiAgICBpZihpID4gbikKICAgIHsKICAgICAgICBpZihLID09IGspCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiAtZGluZjsKICAgIH0KICAgIGlmKHZpc1tpXVtLXSkKICAgICAgICByZXR1cm4gZHBbaV1bS107CiAgICB2aXNbaV1bS10gPSB0cnVlOwogICAgaWYoSyA9PSAwKQogICAgewogICAgICAgIGRvdWJsZSBwMSA9IFBJICogRFtpXS5yICogRFtpXS5yICsgMi4wICogUEkgKiBEW2ldLnIgKiBEW2ldLmggKyBjYWxsKGkgKyAxLCAxKTsKICAgICAgICBkb3VibGUgcDIgPSBjYWxsKGkgKyAxLCAwKTsKICAgICAgICByZXR1cm4gZHBbaV1bS10gPSBtYXgocDEsIHAyKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpZihLIDwgaykKICAgICAgICB7CiAgICAgICAgICAgIGRvdWJsZSBwMSA9IDIuMCAqIFBJICogRFtpXS5yICogRFtpXS5oICsgY2FsbChpICsgMSwgSyArIDEpOwogICAgICAgICAgICBkb3VibGUgcDIgPSBjYWxsKGkgKyAxLCBLKTsKICAgICAgICAgICAgcmV0dXJuIGRwW2ldW0tdID0gbWF4KHAxLCBwMik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBkcFtpXVtLXSA9IDA7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHNvbHZlKCkKewogICAgbiA9IElJOwogICAgayA9IElJOwogICAgbWVtKHZpcywgZmFsc2UpOwogICAgRC5yZXNpemUobiArIDEpOwogICAgcmVwMShpLCBuKQogICAgewogICAgICAgIGRvdWJsZSBhLCBiOwogICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICAgRFtpXSA9IGRhdGEoYSwgYik7CiAgICB9CiAgICBzb3J0KEQuYmVnaW4oKSArIDEsIEQuZW5kKCkpOwogICAgcHJpbnRmKCIlMC4xMGZcbiIsIGNhbGwoMSwgMCkpOwp9Cg==