#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline long long rand(long long x, long long y) {
  return rng() % (y + 1 - x) + x;
}
string inline to_string(char c) {
  string second(1, c);
  return second;
}
template <typename T>
inline T gcd(T a, T b) {
  return a == 0 ? llabs(b) : gcd(b % a, a);
}
using ll = int;
using ld = long double;
using pi = pair<ll, ll>;
using spi = pair<ll, pi>;
using dpi = pair<pi, pi>;
ll n, m, A[(2003)], S[(2003)], C[(2003) * 2], mx[(2003)], sum[(2003) * 2];
pi lvl[(2003)][1 << 12 | 3][2], dp[1 << 12 | 3][2];
inline void put(pi& x, pi y, ll start, ll b) {
  if (b) {
    if (x.first < y.first) x = y;
  } else {
    if (x.first + sum[min(n + m, start + x.second)] <
        y.first + sum[min(n + m, start + y.second)])
      x = y;
  }
}
string b2(ll x) {
  string second = "";
  while (x) second += to_string(x & 1), x >>= 1;
  return second;
}
inline ll firstt(ll x) {
  for (ll i = 0; i <= ll(20); ++i) {
    if (1 << i & x) continue;
    return i;
  }
  assert(0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  for (ll i = 1; i <= ll(n); ++i) cin >> A[i];
  for (ll i = 1; i <= ll(n); ++i) cin >> S[i];
  for (ll i = 1; i <= ll(n + m); ++i) cin >> C[i];
  for (ll i = 1; i <= ll(n + m); ++i) sum[i] = sum[i - 1] + C[i];
  for (auto& i : lvl)
    for (auto& j : i)
      for (auto& k : j) k = pi(-int(1e9 + 1e6), 0);
  ll takeout = (((1 << 28) - 1) ^ ((1 << 12) - 1));
  for (ll i = 1; i <= ll(n); ++i) {
    for (auto& i : dp)
      for (auto& j : i) j = pi(-int(1e9 + 1e6), 0);
    dp[0][0] = dp[0][1] = pi(0, 0);
    for (ll j = A[i]; j <= ll(min(m, A[i] + 11)); ++j) {
      ll diff = j - A[i];
      for (ll b = 0; b <= ll(1); ++b)
        for (ll kk = 0; kk <= ll((1 << 12) - 1); ++kk)
          if (lvl[j][kk][b].first != -int(1e9 + 1e6)) {
            ll k = kk << diff, other = __builtin_popcount(k & takeout),
               toadd = 0, sup = 0;
            k &= ((1 << 12) - 1);
            if (other != diff)
              other = 0;
            else
              sup = other + lvl[j][kk][b].second;
            ll first_zero = firstt(k);
            if (first_zero == 12) {
              if (b == 1) continue;
              toadd = lvl[j][kk][b].second + other, sup = 0;
            }
            put(dp[(k + 1) & ((1 << 12) - 1)][b],
                pi(lvl[j][kk][b].first +
                       sum[min(n + m, A[i] + first_zero + toadd)] -
                       sum[A[i] - 1] - S[i],
                   sup),
                A[i] + 12, b);
          }
    }
    for (ll j = 0; j <= ll((1 << 12) - 1); ++j) {
      put(dp[j][0], dp[j][1], A[i] + 12, 0);
      put(dp[j][1], dp[j][0], A[i] + 12, 1);
    }
    for (ll b = 0; b <= ll(1); ++b)
      dp[1][b] = max(dp[1][b], pi(C[A[i]] - S[i], 0));
    for (ll b = 0; b <= ll(1); ++b)
      for (ll j = 1; j <= ll(i); ++j)
        if (A[j] - A[i] > 11) {
          dp[1][b] = max(dp[1][b], pi(mx[j] + C[A[i]] - S[i], 0));
        }
    for (ll b = 0; b <= ll(1); ++b)
      for (ll j = 0; j <= ll((1 << 12) - 1); ++j) {
        put(lvl[A[i]][j][b], dp[j][b], A[i] + 12, b);
        mx[i] = max(mx[i], dp[j][b].first);
      }
  }
  cout << *max_element(mx + 1, mx + n + 1) << '\n';
}
