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 PYTHON):

Solution:
# -*- coding: utf-8 -*-

ri=(raw_input()).split(" ")
n=int(ri[0])
w=int(ri[1])
d=[0]*n
dp=[]
dm=[]
restrict=0.0
result=0.0

for i in range(n):
    ri=(raw_input()).split(" ")
    d[i]=[0]*3
    d[i][1]=int(ri[0])*1.0 #w
    d[i][2]=int(ri[1])*1.0 #v
    if d[i][1]<=0 and d[i][2]>=0:
        restrict+=d[i][1]
        result+=d[i][2]
    elif (d[i][1]>0 and d[i][2]>0):
        dp+=[[1.0*d[i][1]/d[i][2],d[i][1],d[i][2],0.0]]
    elif (d[i][1]<0 and d[i][2]<0):
        dm+=[[-1.0*d[i][1]/d[i][2],d[i][1],d[i][2],0.0]]

dp=sorted(dp)
dm=sorted(dm)
dmidx=0

for i in range(len(dp)):
    if dp[i][1]+restrict<=w:
        restrict+=dp[i][1]
        result+=dp[i][2]
        dp[i][3]=1.0
    else:
        dp[i][3]=1.0*(w-restrict)/dp[i][1]
        restrict=w
        result+=dp[i][2]*dp[i][3]
        cont=True if (len(dm)>0 and (dp[i][0]<(-dm[dmidx][0]))) else False
        while cont:
            if (1-dp[i][3])*dp[i][1]/(-dm[dmidx][1])<1-dm[dmidx][3]:
                dm[dmidx][3]+=(1-dp[i][3])*dp[i][1]/(-dm[dmidx][1])
                result+=(1-dp[i][3])*(dp[i][2]-dm[dmidx][2]*dp[i][1]/dm[dmidx][1])
                dp[i][3]=1.0
                cont=False
            else:
                dp[i][3]+=(1-dm[dmidx][3])*(-dm[dmidx][1])/dp[i][1]
                result+=(1-dm[dmidx][3])*(dm[dmidx][2]+dp[i][2]*(-dm[dmidx][1])/dp[i][1])
                dm[dmidx][3]=1.0
                dmidx+=1
                if dmidx>=len(dm):
                    cont=False
                elif dp[i][0]>=(-dm[dmidx][0]):
                    cont=False
                
#print(dp)
#print(dm)
#print(restrict)
print(result)