N=int(input()) rest=int(input()) A=list(map(int,input().split())) B=list(map(int,input().split())) L=[] for i in range(N): L.append((A[i],B[i])) L.sort() for i in range(N): A[i]=L[i][0] B[i]=L[i][1] dp0=[-10**10]*(N+1) dp1=[-10**10]*(N+1) dp0[0]=rest v=[0]*(N+1) for i in range(N): v[i+1]=v[i]+B[i] p=[0]*(N+1) for i in range(N-1,-1,-1): p[i]=max(p[i+1],B[i]) result=min(p[0],rest) for i in range(N): K=dp0[i] if dp0[i]>=0: count=min(B[i],K//A[i]) result=max(result,v[i]+count) dp0[i+1]=dp0[i]-B[i]*A[i] if dp0[i+1]>=0: score=v[i+1]+min(dp0[i+1],p[i+1]) result=max(result,score) if dp0[i]-p[i+1]>=0: score=v[i]+p[i+1]+min(B[i],(dp0[i]-p[i+1])//A[i]) result=max(result,score) K=dp1[i] if dp1[i]>=0: count=min(B[i],K//A[i]) result=max(result,v[i]+count) dp1[i+1]=max(dp1[i+1],dp1[i]-B[i]*A[i]) dp1[i+1]=max(dp1[i+1],dp0[i]-B[i]) print(result)