#include using namespace std; bool dp[601][601][50]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector a(2 * n); vector c(2 * n); for(int i = 0; i < n; i++){ cin >> a[i]; a[i + n] = a[i]; } for(int i = 0; i < n; i++){ cin >> c[i]; c[i]--; c[i + n] = c[i]; } vector sum(2 * n + 1); for(int i = 0; i < 2 * n; i++){ sum[i + 1] = sum[i] + a[i]; } for(int i = 0; i < 2 * n; i++){ dp[i][i][c[i]] = true; } long long ans = 0; for(int len = 1; len <= n; len++){ for(int l = 0; l < 2 * n - len + 1; l++){ int r = l + len - 1; for(int cl = 0; cl < 50; cl++){ for(int i = l; i < r; i++){ bool bitl = dp[l][i][cl]; if(bitl == false) continue; for(int cr = max(0, cl - k); cr <= min(49, cl + k); cr++){ bool bitr = dp[i + 1][r][cr]; if(bitl && bitr){ dp[l][r][cl] = true; dp[l][r][cr] = true; } } } if(dp[l][r][cl]){ ans = max(ans, sum[r + 1] - sum[l]); } } } } cout << ans << endl; }