#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18, N = 4200;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  vector<long long> L(n), s(n), c(N, 0), mx(N, 0);
  for (long long& i : L) cin >> i;
  for (long long& i : s) cin >> i;
  for (long long i = 1; i <= n + m; ++i) cin >> c[i];
  vector<vector<long long>> dp(N, vector<long long>(n + 1, -inf));
  for (long long j = 0; j <= n + m; ++j) dp[j][0] = 0;
  for (long long i = n - 1; i >= 0; --i) {
    for (long long k = mx[L[i]]; k >= 0; --k) {
      dp[L[i]][k + 1] = max(dp[L[i]][k + 1], dp[L[i]][k] - s[i] + c[L[i]]);
    }
    ++mx[L[i]];
    for (long long j = L[i]; j <= n + m; j++) {
      for (long long k = mx[j]; k >= 0; --k)
        if (dp[j][k] > -inf / 2) {
          dp[j + 1][k / 2] =
              max(dp[j + 1][k / 2], dp[j][k] + c[j + 1] * (k / 2));
          mx[j + 1] = max(mx[j + 1], k / 2);
        }
    }
  }
  cout << dp[n + m][0];
}
