#include using namespace std; using ll = long long; int n, c; int L[55], W[55]; int dp[55][55][55]; int solve(int i, int j, int x) { int& res = dp[i][j][x]; if (res >= 0) return res; res = 0; for (int k = 0; k < n; k++) { if (L[i] == L[k] || L[j] == L[k]) continue; if (min({L[i], L[j], L[k]}) != L[j] && max({L[i], L[j], L[k]}) != L[j]) continue; if (x < W[k]) continue; res = max(res, L[k] + solve(j, k, x - W[k])); } return res; } int main() { cin.tie(0); ios::sync_with_stdio(false); cin >> n >> c; for (int i = 0; i < n; i++) { cin >> L[i]; } for (int i = 0; i < n; i++) { cin >> W[i]; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (L[i] == L[j]) continue; for (int k = 0; k <= c - W[i] - W[j]; k++) { dp[i][j][k] = -1; } } } int ans = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (L[i] == L[j]) continue; if (c < W[i] + W[j]) continue; int tmp = solve(i, j, c - W[i] - W[j]); if (tmp == 0) continue; ans = max(ans, tmp + L[i] + L[j]); } } cout << ans << endl; return 0; }