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 <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;

int main(){
  int N;
  double W;
  cin >> N >> W;
  double sw = 0, sv = 0;
  priority_queue<pair<double,pair<double,double>>> pq;
  for(int i = 0; i < N; ++i){
    int w, v;
    cin >> w >> v;
    if(w < 0){
      sw += w;
      sv += v;
      w *= -1;
      v *= -1;
    }
    if(v > 0){
      if(w == 0) sv += v;
      else pq.push({(double)v/w,{w,v}});
    }
  }
  //cerr << sw << " " << sv << endl;
  while(W-sw > 1e-9 and not pq.empty()){
    auto p = pq.top();
    double w = p.second.first, v = p.second.second;
    pq.pop();
    double x;
    if(abs(w) > 1e-9) x = min(1.,(W-sw)/w);
    else x = 1.;
    sw += x*w;
    sv += x*v;
  }
  printf("%.12f\n",sv);
}