Problem: Problem statement

Real variables $ x_1, x_2, ..., x_N $ satisfy the following conditions.

1. $ 0 \ leq x_i \ leq 1 $ ($ 1 \ leq i \ leq N $)
2. $ w_1x_1 + w_2x_2 + ... + w_Nx_N \ leq W $



At this time, find the maximum value that $ v_1x_1 + v_2x_2 + ... + v_Nx_N $ can take. It is known that such a maximum actually exists.

Constraint

* $ 1 \ leq N \ leq 10 ^ 5 $
* $ 1 \ leq W \ leq 10 ^ 5 $
* $ -10 ^ 4 \ leq w_i \ leq 10 ^ 4 $
* $ -10 ^ 4 \ leq v_i \ leq 10 ^ 4 $



input

Input follows the following format. All given numbers are integers.


$ N $ $ W $
$ w_1 $ $ v_1 $
$ w_2 $ $ v_2 $
$ ... $
$ w_N $ $ v_N $

output

Output the maximum possible value of $ v_1x_1 + v_2x_2 + ... + v_Nx_N $ on one line. The output must not have an error greater than $ 10 ^ {-3} $.

Examples

Input

1 1
3 1


Output

0.333333


Input

2 3
3 3
1 2


Output

4.000000


Input

2 1
-1 -3
3 10


Output

3.666667

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;

bool comp(const pii &a, const pii &b){
  return b.first*a.second > a.first*b.second;
}

int main(){
  int n,w;
  cin >> n >> w;
  double res = 0;

  vector<pii> item;
  for(int i=0;i<n;i++){
    int a,b;
    cin >> a >> b;
    if(a<=0 && b>=0)w+=-a, res+=b;
    else if(a<0 && b<0){
      w+=-a, res+=b;
      item.push_back(pii(-a,-b));
    }else if(a>0 && b>0){
      item.push_back(pii(a,b));
    }      
  }
  
  sort(item.begin(),item.end(),comp);

  for(pii p : item){
    if(w>p.first){
      w -= p.first; res += p.second;
    }else{
      res += (double)w/p.first * p.second;
      break;
    }
  }
  cout << fixed << setprecision(9) << res << endl;
}