/*
TASK:stairs
LANG:C++
*/
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
struct A
{
double len;
double vis;
};
struct B
{
int pos1,pos2;
double dist;
};

A stairs[101];
bool used[101];
vector <B> solve;

double sol=0;


int N,K;

bool CMP(B i,B j)
{
if(i.dist<j.dist)
        return 1;
        else return 0;
}
int main()
{
//freopen("test.txt","r",stdin);
cin>>N>>K;
int i;

for(i=1;i<=N;i++)
{
cin>>stairs[i].vis>>stairs[i].len;
//cout<<stairs[i].vis<<" "<<stairs[i].len<<"\n";
}

int j,k;

for(i=1;i<=N-K;i++)
{
        solve.clear();
        //int status=0;
        for(j=1;j<N;j++)
                if(!used[j])
                for(k=j+1;k<=N;k++)
                        {
                        if(!used[k]){
                         B temp;
                         temp.dist=stairs[j].len*stairs[k].vis;
                         temp.pos1=j;
                         temp.pos2=k;
                        // cout<<j<<" "<<k<<" "<<temp.dist<<"\n";
                         solve.push_back(temp);
                         break;}
                         }
         sort(solve.begin(),solve.end(),CMP);

        sol=sol+solve[0].dist;
        used[solve[0].pos1]=1;
        stairs[solve[0].pos2].vis=stairs[solve[0].pos2].vis+stairs[solve[0].pos1].vis;
        stairs[solve[0].pos2].len=stairs[solve[0].pos2].len+stairs[solve[0].pos1].len;
        
}
printf("%.3lf\n",sol);

return 0;
}
