//#include "nile.h"
#include "bits/stdc++.h"
using namespace std;
std::vector<long long> calculate_costs(std::vector<int> w, std::vector<int> a , std::vector<int> b, std::vector<int> E) {
long long n = a.size() , q = E.size() , sum = accumulate(a.begin() , a.end() , 0LL);
vector<int> dif(n + 5);
vector<pair<int , int>> W;
for(int i = 0 ; i < n ; i++)
W.push_back({w[i] , i});
sort(W.begin() , W.end());
sort(w.begin() , w.end());
for(int i = 1 ; i <= n ; i++)
dif[i] = a[W[i - 1].second] - b[W[i - 1].second];
vector<long long> ans(q);
vector<pair<int , int>> e;
for(int i = 0 ; i < q ; i++)
e.push_back({E[i] , i});
sort(e.begin() , e.end());
multiset<long long> mx;
vector<long long> dp(n + 5 , 0);
while(q--)
{
long long d = e.back().first , ine = e.back().second;
e.pop_back();
vector<long long> dp(n + 5 , 0);
multiset<long long> st;
int l = 1;
for(int i = 1 ; i <= n ; i++)
{
if(i > 1)
st.insert(dp[i - 2] + dif[i - 1]);
while(l < i && w[i - 1] - w[l - 1] > d)
{
st.erase(st.find(dp[l - 1] + dif[l]));
l++;
}
dp[i] = dp[i - 1];
if(!st.empty())
dp[i] = max(dp[i] , dif[i] + *st.rbegin());
}
ans[ine] = sum - dp[n];
}
return ans;
}