#include <bits/stdc++.h>
using namespace std;
void chmax(int& a, int b) { a = max(a, b); }
int main() {
  int N, M;
  cin >> N >> M;
  vector<int> L(N), S(N), C(N + M);
  for (int i = 0; i < N; i++) scanf("%d", &L[i]), L[i]--;
  for (int i = 0; i < N; i++) scanf("%d", &S[i]);
  for (int i = 0; i < N + M; i++) scanf("%d", &C[i]);
  reverse(L.begin(), L.end());
  reverse(S.begin(), S.end());
  static int dp[2001][2001];
  const int MINF = -1e9;
  for (int i = 0; i <= 2000; i++)
    for (int j = 0; j <= 2000; j++) dp[i][j] = MINF;
  for (int i = 0; i <= 2000; i++) dp[i][0] = 0;
  vector<int> mx(M + 1);
  for (int i = 0; i < N; i++) {
    for (int l = 0; l < L[i]; l++)
      for (int n = 0; n <= mx[l]; n++)
        if (dp[l][n] != MINF) {
          chmax(dp[l + 1][n >> 1], dp[l][n] + C[l + 1] * (n >> 1));
          chmax(mx[l + 1], n >> 1);
        }
    for (int n = mx[L[i]]; n >= 0; n--)
      chmax(dp[L[i]][n + 1], dp[L[i]][n] - S[i] + C[L[i]]);
    mx[L[i]]++;
  }
  int ans = MINF;
  for (int l = 0; l <= M; l++)
    for (int n = 0; n <= N; n++) {
      if (dp[l][n] == MINF) continue;
      int v = dp[l][n];
      int lv = l, nv = n;
      while (nv >= 2) {
        lv++;
        nv >>= 1;
        v += C[lv] * nv;
      }
      chmax(ans, v);
    }
  cout << ans << endl;
  return 0;
}
