import numpy as np M=np.loadtxt(open(0),"q") N,W=M[0];v,w=M[1:].T;i=np.argmax(v/w) V=W//(U:=w[i]*max(w))*v[i];W%=U;dp=np.array([0]+[-10**9]*W) for v,w in M[1:]: for i in range(W-w+1):dp[i+w]=max(dp[i+w],dp[i]+v) print(V+max(dp))