#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
long long power(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) res = (res * x) % 1000000007;
    y = y / 2, x = (x * x) % 1000000007;
  }
  return res % 1000000007;
}
const int N = 4010;
long long dp[N][N];
bool haha[N][N];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  long long aggressive[n], costs[n], profit[n + m + 1];
  long long i, j, k;
  for (long long i = 0; i < (n); ++i) cin >> aggressive[i];
  for (long long i = 0; i < (n); ++i) cin >> costs[i];
  for (i = 1; i <= n + m; i++) cin >> profit[i];
  for (i = 0; i < N; i++) {
    for (j = 1; j < N; j++) {
      dp[i][j] = -1e9;
      haha[i][j] = 0;
    }
  }
  for (i = n - 1; i >= 0; i--) {
    haha[aggressive[i]][0] = 1;
    for (j = n; j >= 1; j--) {
      if (haha[aggressive[i]][j - 1]) {
        long long lol =
            dp[aggressive[i]][j - 1] + profit[aggressive[i]] - costs[i];
        if (dp[aggressive[i]][j] < lol) {
          dp[aggressive[i]][j] = lol;
          haha[aggressive[i]][j] = 1;
          if (j == 1) {
            for (k = aggressive[i] + 1; k <= n + m; k++)
              dp[k][0] = max(dp[k][0], dp[aggressive[i]][j]);
          }
        }
        long long temp = j, cnt = 1;
        while (temp / 2) {
          lol = dp[aggressive[i] + cnt - 1][temp] +
                (temp / 2) * profit[aggressive[i] + cnt];
          if (dp[aggressive[i] + cnt][temp / 2] < lol) {
            dp[aggressive[i] + cnt][temp / 2] = lol;
            haha[aggressive[i] + cnt][temp / 2] = 1;
            if (temp / 2 == 1) {
              for (k = aggressive[i] + 1 + cnt; k <= n + m; k++)
                dp[k][0] = max(dp[k][0], dp[aggressive[i] + cnt][temp / 2]);
            }
          }
          temp /= 2, cnt++;
        }
      }
    }
  }
  long long ans = 0;
  for (i = 0; i <= n + m; i++) ans = max(ans, dp[i][1]);
  cout << ans;
}
