Reality Show
Contest: Codeforces Round 626 (Div. 1, based on Moscow Open Olympiad in Informatics)
Difficulty rating: 2800
Tags: bitmasks, dp

A popular reality show is recruiting a new cast for the third season! $$$n$$$ candidates numbered from $$$1$$$ to $$$n$$$ have been interviewed. The candidate $$$i$$$ has aggressiveness level $$$l_i$$$, and recruiting this candidate will cost the show $$$s_i$$$ roubles.

The show host reviewes applications of all candidates from $$$i=1$$$ to $$$i=n$$$ by increasing of their indices, and for each of them she decides whether to recruit this candidate or not. If aggressiveness level of the candidate $$$i$$$ is strictly higher than that of any already accepted candidates, then the candidate $$$i$$$ will definitely be rejected. Otherwise the host may accept or reject this candidate at her own discretion. The host wants to choose the cast so that to maximize the total profit.

The show makes revenue as follows. For each aggressiveness level $$$v$$$ a corresponding profitability value $$$c_v$$$ is specified, which can be positive as well as negative. All recruited participants enter the stage one by one by increasing of their indices. When the participant $$$i$$$ enters the stage, events proceed as follows:

- The show makes $$$c_{l_i}$$$ roubles, where $$$l_i$$$ is initial aggressiveness level of the participant $$$i$$$.
- If there are two participants with the same aggressiveness level on stage, they immediately start a fight. The outcome of this is:  the defeated participant is hospitalized and leaves the show.  aggressiveness level of the victorious participant is increased by one, and the show makes $$$c_t$$$ roubles, where $$$t$$$ is the new aggressiveness level.
- The fights continue until all participants on stage have distinct aggressiveness levels.

It is allowed to select an empty set of participants (to choose neither of the candidates).

The host wants to recruit the cast so that the total profit is maximized. The profit is calculated as the total revenue from the events on stage, less the total expenses to recruit all accepted participants (that is, their total $$$s_i$$$). Help the host to make the show as profitable as possible.

Input format:
The first line contains two integers $$$n$$$ and $$$m$$$ ($$$1 \le n, m \le 2000$$$) — the number of candidates and an upper bound for initial aggressiveness levels.

The second line contains $$$n$$$ integers $$$l_i$$$ ($$$1 \le l_i \le m$$$) — initial aggressiveness levels of all candidates.

The third line contains $$$n$$$ integers $$$s_i$$$ ($$$0 \le s_i \le 5000$$$) — the costs (in roubles) to recruit each of the candidates.

The fourth line contains $$$n + m$$$ integers $$$c_i$$$ ($$$|c_i| \le 5000$$$) — profitability for each aggrressiveness level.

It is guaranteed that aggressiveness level of any participant can never exceed $$$n + m$$$ under given conditions.

Output format:
Print a single integer — the largest profit of the show.

Constraints:
Time limit: 2.0 s
Memory limit: 512.0 MB

Note:
In the first sample case it is optimal to recruit candidates $$$1, 2, 3, 5$$$. Then the show will pay $$$1 + 2 + 1 + 1 = 5$$$ roubles for recruitment. The events on stage will proceed as follows:

- a participant with aggressiveness level $$$4$$$ enters the stage, the show makes $$$4$$$ roubles;
- a participant with aggressiveness level $$$3$$$ enters the stage, the show makes $$$3$$$ roubles;
- a participant with aggressiveness level $$$1$$$ enters the stage, the show makes $$$1$$$ rouble;
- a participant with aggressiveness level $$$1$$$ enters the stage, the show makes $$$1$$$ roubles, a fight starts. One of the participants leaves, the other one increases his aggressiveness level to $$$2$$$. The show will make extra $$$2$$$ roubles for this.

Total revenue of the show will be $$$4 + 3 + 1 + 1 + 2=11$$$ roubles, and the profit is $$$11 - 5 = 6$$$ roubles.

In the second sample case it is impossible to recruit both candidates since the second one has higher aggressiveness, thus it is better to recruit the candidate $$$1$$$.

Example input:
5 4
4 3 1 2 1
1 2 1 2 1
1 2 3 4 5 6 7 8 9

Example output:
6

Example input:
2 2
1 2
0 0
2 1 -100 -100

Example output:
2

Editorial:
First of all, we will notice that the order of entering doesn't affect the answer.
Let's reverse the sequence. We will add people in the non-decreasing order. Let's use dynamic programming: $$$dp[i][k][cnt]$$$ is the answer if we processed first $$$i$$$ candidates with the maximum value less or equal $$$k$$$ and total number of people who will reach $$$l_j = k$$$ is $$$cnt \leq n$$$.
How we should change values of $$$dp$$$ when we go from $$$k$$$ to $$$k + 1$$$? $$$dp[i][k + 1][cnt / 2] \leq dp[i][k][cnt] + (cnt / 2) \cdot c_{k + 1}$$$
But how $$$dp$$$ changes when we take $$$i$$$-th element? $$$dp[i + 1][a_i][cnt] \leq dp[i][a_i][cnt - 1] + s_i$$$
After adding $$$i$$$-th element we also should change $$$dp[i + 1][>a_i ]$$$. But every next lay will change less: $$$n + \left \lceil \frac{n}{2} \right \rceil + \left \lceil \frac{n}{4} \right \rceil + \left \lceil \frac{n}{8} \right \rceil + \ldots = O(n + m)$$$.
It clear, that we can remove first parameter of $$$dp$$$ and finally get the asymptotics $$$O(n(n + m))$$$.