#include <bits/stdc++.h>
using namespace std;
const int N = 5000;
int dp[N][N], c[N], a[N], s[N];
int ans = 0;
const int INF = 1e9;
inline void rlx(int &x, int y) { x = max(x, y); }
signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    a[i]--;
  }
  for (int i = 0; i < n; i++) cin >> s[i];
  for (int i = 0; i < n + m; i++) cin >> c[i];
  for (int i = 0; i < n + m; i++) {
    for (int j = 1; j < n + m; j++) {
      dp[i][j] = -INF;
    }
  }
  for (int i = n - 1; i >= 0; i--) {
    int x = a[i];
    for (int j = n + m - 1; j > 0; j--) {
      rlx(dp[x][j], dp[x][j - 1] - s[i] + c[x]);
      if (dp[x][j] == -INF) continue;
      int cnt = j;
      int y = x;
      while (cnt) {
        rlx(dp[y + 1][cnt / 2], dp[y][cnt] + cnt / 2 * c[y + 1]);
        y++;
        cnt /= 2;
      }
    }
    for (int j = 1; j < n + m; j++) dp[j][0] = max(dp[j][0], dp[j - 1][0]);
  }
  for (int i = 0; i < n + m; i++) {
    rlx(ans, max(dp[i][0], dp[i][1]));
  }
  cout << ans << '\n';
}
