def list3(a, b, c, *, val=0): return [[[val] * c for _ in range(b)] for _ in range(a)] N, C = map(int, input().split()) L = list(map(int, input().split())) W = list(map(int, input().split())) sz = 51 dp = list3(sz, sz, sz) for i in range(N): for j in range(N): if L[i] == L[j]: continue c = W[i] + W[j] if c > C: continue a = L[i] b = L[j] dp[c][a][b] = max(dp[c][a][b], a + b) ans = 0 for i in range(sz): # コスト for j in range(sz): # 二つ前の門松 for k in range(sz): # 一つ前の門松 if dp[i][j][k] == 0: continue for l, w in zip(L, W): if i + w > C: continue if (j < k > l or j > k < l) and j != l: dp[i+w][k][l] = max(dp[i+w][k][l], dp[i][j][k] + l) ans = max(ans, dp[i+w][k][l]) print(ans)