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 <sstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <climits>
#include <cfloat>
using namespace std;

int main()
{
    int n;
    double wSum;
    cin >> n >> wSum;

    double ret = 0.0;
    multimap<double, pair<int, int> > mm;
    for(int i=0; i<n; ++i){
        int w, v;
        cin >> w >> v;
        if(w > 0){
            if(v > 0)
                mm.insert(make_pair(-v/(double)w, make_pair(w, v)));
        }else{
            wSum -= w;
            ret += v;
            if(v < 0)
                mm.insert(make_pair(-v/(double)w, make_pair(-w, -v)));
        }
    }

    while(!mm.empty()){
        int w = mm.begin()->second.first;
        int v = mm.begin()->second.second;
        mm.erase(mm.begin());

        if(w <= wSum){
            wSum -= w;
            ret += v;
        }else{
            ret += (double)v * wSum / w;
            wSum = 0;
        }
    }

    printf("%.10f\n", ret);
    return 0;
}