#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 7;
const int M = 2 * N;
int n, m;
int l[N], s[N], c[M];
int kek[M][N];
map<int, int> dp[N][M];
int rec(int i, int j, int k) {
  if (i == 0) {
    return kek[j][k];
  }
  if (dp[i][j].find(k) != dp[i][j].end()) {
    return dp[i][j][k];
  } else {
    int &res = dp[i][j][k];
    res = rec(i - 1, j, k);
    if (l[i] >= j) {
      int r = 0;
      for (int it = 0; it < l[i] - j && k; ++it) {
        r += (k /= 2) * c[j + it + 1];
      }
      res = max(res, rec(i - 1, l[i], k + 1) + r + c[l[i]] - s[i]);
    }
    return res;
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> l[i];
  }
  for (int i = 1; i <= n; ++i) {
    cin >> s[i];
  }
  for (int i = 1; i <= n + m; ++i) {
    cin >> c[i];
  }
  l[0] = 1e9;
  for (int j = M - 2; j >= 0; --j) {
    for (int k = 0; k < N - 1; ++k) {
      kek[j][k] = kek[j + 1][k / 2] + k / 2 * c[j + 1];
    }
  }
  cout << rec(n, 0, 0) << '\n';
  return 0;
}
