#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void program();
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  program();
}
const int MX = 5002;
int n, m;
int l[MX], s[MX], c[MX];
int dp[MX][MX];
void update(int x, int y) {
  if (x >= MX) return;
  int newVal = dp[x][y] + (y / 2) * c[x + 1];
  if (newVal > dp[x + 1][y / 2]) {
    dp[x + 1][y / 2] = newVal;
    update(x + 1, y / 2);
  }
}
void program() {
  cin >> n >> m;
  for (int i = int(0); i < int(n); i++) cin >> l[i];
  for (int i = int(0); i < int(n); i++) cin >> s[i];
  for (int i = int(0); i < int(n + m); i++) cin >> c[i + 1];
  for (int i = int(0); i < int(MX); i++)
    for (int j = int(0); j < int(MX); j++) dp[i][j] = -1e9;
  for (int i = int(0); i < int(MX); i++) dp[i][0] = 0;
  for (int i = int(n - 1); i >= int(0); i--) {
    for (int j = int(n + m + 1 - 1); j >= int(0); j--) {
      if (dp[l[i]][j] == -1e9) continue;
      dp[l[i]][j + 1] = max(dp[l[i]][j + 1], dp[l[i]][j] - s[i] + c[l[i]]);
      update(l[i], j + 1);
    }
  }
  cout << dp[n + m + 1][0] << endl;
}
