#include <bits/stdc++.h>
using namespace std;
const int mxn = 4000;
int n, m;
int a[mxn], b[mxn], first[mxn];
int dp[mxn][mxn];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = n - 1; ~i; i--) cin >> a[i], a[i]--;
  for (int i = n - 1; ~i; i--) cin >> b[i];
  for (int i = 0; i < n + m; i++) cin >> first[i];
  memset(dp, 0xcf, sizeof(dp));
  for (int i = 0; i < n + m; i++) dp[i][0] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = n; j; j--) {
      dp[a[i]][j] = max(dp[a[i]][j], dp[a[i]][j - 1] + first[a[i]] - b[i]);
    }
    for (int j = a[i] + 1, k = n; j < n + m; j++, k >>= 1)
      for (int l = 0; l <= k; l++) {
        dp[j][l / 2] = max(dp[j][l / 2], dp[j - 1][l] + l / 2 * first[j]);
      }
  }
  cout << dp[n + m - 1][0] << '\n';
  return 0;
}
