#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
const int N = 2e3 + 10;
const long long mod = 1e9 + 7;
const long long mod2 = 998244353;
const long long inf = 1e18;
const int LOG = 22;
long long pw(long long a, long long b, long long M) {
  return (!b ? 1
             : (b & 1 ? (a * pw(a * a % M, b / 2, M)) % M
                      : pw(a * a % M, b / 2, M)));
}
int n, m, l[N], s[N];
long long c[N << 1], dp[N << 1][N];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &l[i]);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &s[i]);
  }
  for (int i = 1; i <= n + m; i++) {
    scanf("%lld", &c[i]);
  }
  reverse(l + 1, l + n + 1);
  reverse(s + 1, s + n + 1);
  for (int i = 0; i < N << 1; i++)
    for (int j = 1; j < N; j++) dp[i][j] = -inf;
  for (int i = 1; i <= n; i++) {
    for (int k = n; k >= 1; k--) {
      dp[l[i]][k] = max(dp[l[i]][k], dp[l[i]][k - 1] - s[i] + c[l[i]]);
    }
    int Mx = n;
    for (int j = l[i] + 1; j < N << 1; j++) {
      for (int k = 0; k <= Mx; k++) {
        dp[j][k >> 1] = max(dp[j][k >> 1], dp[j - 1][k] + (k >> 1) * c[j]);
      }
      Mx >>= 1;
    }
  }
  long long tot = 0;
  for (int i = 0; i < N << 1; i++) tot = max(tot, dp[i][1]);
  printf("%lld", tot);
  return 0;
}
