#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
;
const int maxn = 4010;
unsigned long long powmod(unsigned long long n, unsigned long long k) {
  unsigned long long ret = 1;
  while (k) {
    if (k & 1) ret = ret * n % mod;
    n = n * n % mod;
    k >>= 1;
  }
  return ret;
}
int agg[maxn];
int cost[maxn];
int prof[maxn];
int dp[2040][2040];
void upd(int& n, int k) {
  if (n < k) n = k;
}
int getprof(int n, int cnt, int target) {
  int ret = 0;
  while (cnt > 1 && n < target) {
    ret += (cnt / 2) * prof[n + 1];
    cnt /= 2;
    n++;
  }
  return ret;
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> agg[i];
  for (int i = 1; i <= n; i++) cin >> cost[i];
  for (int i = 1; i <= n + m; i++) cin >> prof[i];
  for (int i = 0; i < 2040; i++)
    for (int j = 0; j < 2040; j++) dp[i][j] = -(1e9);
  dp[0][0] = 0;
  for (int i = n; i >= 1; i--) {
    int target = agg[i];
    for (int j = agg[i]; j >= 0; j--) {
      for (int k = target - j < 30 ? n : 0; k >= 0; k--)
        if (dp[j][k] >= -(1e8)) {
          int left = 0;
          if (target - j < 30) left = k / (1 << (target - j));
          upd(dp[target][left + 1],
              dp[j][k] - cost[i] + prof[target] + getprof(j, k, agg[i]));
        }
    }
    for (int k = n; k >= 0; k--)
      upd(dp[target + 30][0], dp[target][k] + getprof(target, k, 10000));
  }
  int ans = 1e9;
  ans *= -1;
  for (int j = m; j >= 0; j--)
    for (int k = n; k >= 0; k--) {
      int left = 0;
      int target = 10000;
      upd(ans, dp[j][k] + getprof(j, k, target));
    }
  cout << ans << endl;
}
