#include <bits/stdc++.h>
int l[2005];
long long s[2005], c[4005];
long long f[4005][2005];
long long inf = 1e17 + 7;
long long max(long long a, long long b) { return a > b ? a : b; }
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = n; i >= 1; i--) scanf("%d", &l[i]);
  for (int i = n; i >= 1; i--) scanf("%lld", &s[i]);
  for (int i = 1; i <= n + m; i++) scanf("%lld", &c[i]);
  for (int i = 1; i <= n + m; i++) {
    for (int j = 0; j <= n; j++) {
      if (j == 0)
        f[i][j] = 0;
      else
        f[i][j] = -inf;
    }
  }
  for (int i = 1; i <= n; i++) {
  }
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    int u = l[i];
    for (int j = n; j >= 1; j--) {
      f[u][j] = max(f[u][j], f[u][j - 1] + c[u] - s[i]);
    }
    int upper = n;
    for (int j = u + 1; j <= n + m; j++) {
      upper /= 2;
      for (int k = 0; k <= upper; k++) {
        long long maxn = -inf;
        if (2 * k <= n) maxn = max(maxn, f[j - 1][2 * k]);
        if (2 * k + 1 <= n) maxn = max(maxn, f[j - 1][2 * k + 1]);
        f[j][k] = max(f[j][k], maxn + c[j] * k);
      }
    }
  }
  for (int i = 1; i <= n + m; i++) {
    for (int j = 0; j <= 1; j++) {
      ans = max(ans, f[i][j]);
    }
  }
  printf("%lld\n", ans);
  return 0;
}
