#include #include #include #include #include using namespace std; int main() { int n, k; cin >> n >> k; vector> v(n); auto can = [&](double thresh) -> bool { priority_queue, vector>, greater>> q; for(int i = 0; i < n; i++) { q.emplace(v[i][1], v[i][0]); double need = thresh; while(need > 0) { if(q.size() == 0) return false; auto [_, val] = q.top(); q.pop(); if(_ < i) continue; double use = min(need, val); need -= use; val -= use; if(val) q.emplace(_, val); } } return true; }; for(auto& x: v) { cin >> x[0] >> x[1]; x[1]--; } double lhs = 0; double rhs = 1e9; for(int q = 0; q < 60; q++) { double mid = (lhs+rhs)/2; if(can(mid)) lhs = mid; else rhs = mid; } if(lhs == 0) cout << "-1\n"; else cout << fixed << setprecision(39) << lhs/k << "\n"; }