//Happy Birthday @rian_tkb !! #include using namespace std; typedef long long ll; typedef pair l_l; typedef pair i_i; template inline bool chmax(T &a, T b) { if(a < b) { a = b; return true; } return false; } template inline bool chmin(T &a, T b) { if(a > b) { a = b; return true; } return false; } ll N; ll A[3005], B[3005], D[3005]; bool dp[3005][3005]; bool f(int num) { for(int i = 0; i <= 3000; i++) { for(int j = 0; j <= 3000; j++) { dp[i][j] = false; } } dp[0][0] = true; for(int i = 0; i <= num; i++) { for(int j = 0; j <= num - i; j++) { bool can = false; if(i > 0 && dp[i-1][j]) can = true; if(j > 0 && dp[i][j-1]) can = true; if(!can) continue; if(D[num-i-j] <= A[i] + B[j]) dp[i][j] = true; } } for(int i = 0; i <= num; i++) { if(dp[i][num-i]) return true; } return false; } int main() { cin >> N; for(int i = 0; i <= N; i++) cin >> A[i]; for(int i = 0; i <= N; i++) cin >> B[i]; for(int i = 0; i < N; i++) cin >> D[i]; sort(D, D + N); ll ok = 0; ll ng = N + 1; while(ng - ok > 1) { ll mid = (ok + ng) / 2; if(f(mid)) ok = mid; else ng = mid; } cout << ok << endl; return 0; }