n,C = map(int,input().split()) *v, = map(int,input().split()) *w, = map(int,input().split()) # dp[cost][2つ前][1つ前] = max(length) N = 51 dp = [[[0]*N for _ in range(N)] for _ in range(C+1)] for i in range(n): for j in range(n): if v[i] != v[j] and w[i]+w[j] <= C: dp[w[i]+w[j]][v[i]][v[j]] = v[i]+v[j] ans = 0 for i in range(C): for j in range(N): for k in range(N): if dp[i][j][k] == 0: continue for l in range(n): if j == v[l]: continue if i+w[l] > C: continue if j > k < v[l] or j < k > v[l]: x = dp[i][j][k] + v[l] ans = max(ans,x) dp[i+w[l]][k][v[l]] = max(dp[i+w[l]][k][v[l]], x) print(ans)