#include <bits/stdc++.h>
using namespace std;
int const N = 2000, B = 11, inf = 1e9;
int dp[N + 1][1 << B][2], l[N + 1], s[N + 1], c[N << 1 | 1], n, m, dp0[N + 1],
    tmp[1 << B][2];
void up(int &x, int y) {
  if (y > x) x = y;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i < (int)(n + 1); ++i) scanf("%d", l + i);
  for (int i = 1; i < (int)(n + 1); ++i) scanf("%d", s + i);
  for (int i = 1; i < (int)(n + m + 1); ++i) scanf("%d", c + i);
  for (int k = 0; k < (int)(m + 1); ++k)
    for (int i = 0; i < (int)(1 << B); ++i)
      for (int j = 0; j < (int)(2); ++j) dp[k][i][j] = -inf;
  for (int i = 0; i < (int)(m + 1); ++i) dp0[i] = -inf;
  dp[m][0][0] = 0;
  dp0[m] = 0;
  l[0] = inf;
  for (int i = 1; i < (int)(n + 1); ++i) {
    for (int j = l[i]; j < (int)(m + 1); ++j)
      if (j - l[i] > B + 1) {
        up(dp[l[i]][1][0], dp0[j] - s[i] + c[l[i]]);
        up(dp0[l[i]], dp[l[i]][1][0]);
      } else if (j == l[i]) {
        for (int k = 0; k < (int)(1 << B); ++k)
          for (int w = 0; w < (int)(2); ++w) tmp[k][w] = dp[j][k][w];
        for (int k = 0; k < (int)(1 << B); ++k) {
          int z = k, nc = c[j] - s[i], t = 0;
          while (z >> t & 1) {
            z ^= 1 << t;
            ++t;
            nc += c[l[i] + t];
          }
          if (t == B) {
            up(dp[j][0][0], tmp[k][1] + nc);
            up(dp[j][0][1], tmp[k][1] + nc);
            up(dp0[j], dp[j][0][0]);
          } else {
            z ^= 1 << t;
            up(dp[j][z][0], tmp[k][0] + nc);
            up(dp[j][z][1], tmp[k][1] + nc);
            up(dp0[j], dp[j][z][0]);
          }
        }
        for (int k = 0; k < (int)(1 << B); ++k)
          for (int w = 0; w < (int)(2); ++w) swap(tmp[k][w], dp[j][k][w]);
      } else
        for (int k = 0; k < (int)(1 << B); ++k) {
          int of = j - l[i], z = k << of ^ 1, nc = c[l[i]] - s[i];
          up(dp[l[i]][z & (1 << B) - 1][0], dp[j][k][0] + nc);
          up(dp0[l[i]], dp[l[i]][z & (1 << B) - 1][0]);
          int t = B;
          while (z >> t & 1) {
            z ^= 1 << t;
            ++t;
            nc += c[l[i] + t];
          }
          up(dp[l[i]][z & (1 << B) - 1][1], dp[j][k][t == B + of] + nc);
        }
    for (int k = 0; k < (int)(1 << B); ++k)
      for (int w = 0; w < (int)(2); ++w) up(dp[l[i]][k][w], tmp[k][w]);
  }
  int an = -inf;
  for (int i = 1; i < (int)(m + 1); ++i) up(an, dp0[i]);
  printf("%d\n", an);
}
