#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<cmath>
#include<iomanip>
#include <sstream>
#include<algorithm>
#include <cstdio>
#include<string>
typedef struct gold {
double weight, value;
double per_value;
};
std::vector<gold*>v;
void swap1(gold* g1, gold* g2) {
std::swap(g1->weight, g2->weight);
std::swap(g1->value, g2->value);
std::swap(g1->per_value, g2->per_value);
}
void quicksort(int s,int e) {
if (s > e)
return;
else {
gold* temp = new gold();
temp->weight = v[s]->weight;
temp->value = v[s]->value;
temp->per_value = v[s]->per_value;
int i = s, j = e;
while (i < j) {
while (i < j && v[j]->per_value >= temp->per_value)
j--;
while (i < j && v[i]->per_value <= temp->per_value)
i++;
if (i < j)
swap1(v[i], v[j]);
}
swap1(v[s], v[i]);
swap1(v[i], temp);
quicksort(s, i - 1);
quicksort(i + 1, e);
}
}
void control_point2(double num) {
int numi = num;
int less = (num - numi)*100;
std::cout << numi<<".";
if (less >= 10)
std::cout << less;
else
std::cout << 0 << less;
}
int main() {
double n,t;
std::cin >> n>>t;
for (int i = 0; i < n; i++) {
gold* g = new gold();
std::cin >> g->weight >> g->value;
g->per_value = g->value / g->weight;
v.push_back(g);
}
quicksort(0, v.size() - 1);
int max = v.size()-1;
double value = 0;
while (t>0&&max>=0) {
int num = std::min(v[max]->weight,t);
value += num * v[max]->per_value;
t -= num;
max--;
}
control_point2(value);
}