#include <bits/stdc++.h>
using namespace std;
const int dx[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};
const int dy[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
void AIA() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
bool isprime(long long n) {
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) return 0;
  }
  return (n != 1);
}
long long gcd(long long x, long long y) { return (y == 0 ? x : gcd(y, x % y)); }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long rem(int x, int N) { return (x % N + N) % N; }
void solve() {
  long long n, k;
  cin >> n >> k;
  vector<int> v(n), cost(n);
  for (int i = 0; i < n; i++) cin >> v[i];
  long long a;
  cin >> a;
  for (int i = 0; i < n; i++) cin >> cost[i];
  long long ans = 0;
  set<int> st;
  for (int i = 0; i < n; i++) {
    st.insert(cost[i]);
    while (k < v[i] && st.size()) {
      k += a;
      ans += *st.begin();
      st.erase(st.begin());
    }
    if (k < v[i]) {
      cout << "-1";
      return;
    }
  }
  cout << ans;
}
int main() {
  solve();
  return 0;
}
