#include <bits/stdc++.h>
using namespace std;
int l[2000], s[2000], c[4001];
int dp[2000][2001], mm[2000];
int best[2001][4001];
int main() {
  int i;
  int n, m;
  scanf("%d %d", &n, &m);
  for (i = 0; i < n; i++) scanf("%d", &l[i]);
  for (i = 0; i < n; i++) scanf("%d", &s[i]);
  for (i = 1; i <= n + m; i++) scanf("%d", &c[i]);
  int j, k, ans = 0;
  for (i = 0; i < n; i++) {
    for (j = 0; j <= n; j++) dp[i][j] = -1e9;
  }
  for (i = 0; i <= m; i++) {
    for (j = 0; j <= n + m; j++) best[i][j] = -1e9;
  }
  for (i = n - 1; i >= 0; i--) {
    dp[i][1] = c[l[i]] - s[i];
    for (j = i + 1; j < n; j++) {
      if (l[j] < l[i] - 13) dp[i][1] = max(dp[i][1], mm[j] + c[l[i]] - s[i]);
    }
    for (j = l[i]; j >= max(l[i] - 13, 0); j--) {
      for (k = 1; k < n - i; k++) {
        int x = 0, b = 0;
        int z = k >> (l[i] - j);
        while (z & (1 << b)) x += c[b + l[i] + 1], b++;
        dp[i][z + 1] = max(dp[i][z + 1], best[j][k] + c[l[i]] - s[i] + x);
      }
    }
    mm[i] = -1e9;
    for (j = 1; j <= n - i; j++) {
      best[l[i]][j] = max(best[l[i]][j], dp[i][j]);
      mm[i] = max(mm[i], dp[i][j]);
    }
    ans = max(ans, mm[i]);
  }
  printf("%d\n", ans);
  return 0;
}
