#include <bits/stdc++.h>
using namespace std;
vector<int> L[2121];
int D[4121][4141], l[4141], s[4141], c[4141];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  int i, j, k;
  for (i = 1; i <= n; i++) scanf("%d", &l[i]);
  for (i = 1; i <= n; i++) scanf("%d", &s[i]);
  for (i = 1; i <= n + m; i++) scanf("%d", &c[i]);
  reverse(l + 1, l + n + 1);
  reverse(s + 1, s + n + 1);
  for (i = 1; i <= n + m; i++)
    for (j = 1; j <= n * 2; j++) D[i][j] = -1e9;
  for (i = 1; i <= n; i++) {
    for (j = n; j > 0; j--) {
      D[l[i]][j] = max(D[l[i]][j], D[l[i]][j - 1] - s[i] + c[l[i]]);
    }
    int v, p;
    for (v = n / 2, p = l[i] + 1; v > 0; v /= 2, p++) {
      for (int q = 0; q <= v; q++) {
        D[p][q] =
            max(D[p][q], max(D[p - 1][q * 2], D[p - 1][q * 2 + 1]) + c[p] * q);
      }
    }
    for (int q = p; q <= n + m + 1; q++)
      D[q][0] = max(D[q][0], max(D[q - 1][0], D[q - 1][1]));
  }
  int ans = 0;
  for (i = 1; i <= n + m; i++) {
    for (j = 0; j <= 1; j++) {
      ans = max(ans, D[i][j]);
    }
  }
  printf("%d\n", ans);
  return 0;
}
