#include<stdio.h>
int main(){
//贪心算法
//每行两个整数,算出单价,并加入第三列,从单价最高的开始装。[4,50]
//(10 60) -> (10 60 6)
//(20 100) -> (20 100 5)
//(30 120) -> (30 120 4)
//(15 45) -> (15 45 3)
//N为金币堆数,T为背包容量
int N, T;
scanf("%d %d", &N, &T);
//存储第i堆金币,以及他的重量。最多100个元素,每个元素有3个属性
float b[100][3] = {0};
for (int i=0; i<N; i++){
scanf("%f %f", &b[i][0], &b[i][1]);
b[i][2] = b[i][1] / b[i][0];
}
// 根据b[i][2],也就是计算出来的单价,进行排序。从高到低装入背包。
// 针对b[i][2]使用冒泡排序,把金子按照单价重新排一次
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (b[j][2] < b[j+1][2]) {
// 交换 b[j] 和 b[j+1] 的元素
int temp[3];
for (int k = 0; k < 3; k++) {
temp[k] = b[j][k];
b[j][k] = b[j+1][k];
b[j+1][k] = temp[k];
}
}
}
}
// 最终的金子价值
float sum = 0;
for (int i = 0; i < N; i++) {
// 背包容量为T,b[i][0]为第i堆金子的数量
//每次针对b[i][0],取一个单位的金子,每取一次金子,b[i][0]-1,T-1,sum + 第i堆金子的单价
for (int j = 0; j < b[i][0] && T > 0; j++, T--) {
sum += b[i][2];
}
}
printf("%.2f", sum);
return 0;
}