#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
struct artifact{ll w,a,b,c;};
const int mxn=1e5+5;
vector<int>p(mxn),sz(mxn);
int od;
int fp(int i){
if(i==p[i])return i;
return p[i]=fp(p[i]);
}
void mrg(int a,int b){
a=fp(a),b=fp(b);
if(sz[a]<sz[b])swap(a,b);
if(sz[a]%2==1&&sz[b]%2==1)od-=2;
sz[a]+=sz[b];
p[b]=a;
}
vector<ll>calculate_costs(vector<int>w,vector<int>a,vector<int>b,vector<int>e){
int n=w.size(),q=e.size();
vector<artifact>v(n);
set<pair<int,int>>s;
vector<ll>res(q);
vector<pair<int,int>>qrys;
for(int i=0;i<n;i++)p[i]=i,sz[i]=1,od++;
for(int i=0;i<q;i++)qrys.push_back({e[i],i});
for(int i=0;i<n;i++)v[i]={w[i],a[i],b[i],a[i]-b[i]};
sort(v.begin(),v.end(),[](auto a,auto b){return a.w<b.w;});
for(int i=1;i<n;i++)s.insert({v[i].w-v[i-1].w,i});
sort(qrys.begin(),qrys.end());
for(int i=0;i<q;i++){
while(s.size()&&s.begin()->F<=qrys[i].F){
// cout<<s.begin()->S<<' '<<od<<' ';
mrg(s.begin()->S,s.begin()->S-1);
s.erase(s.begin());
// cout<<od<<endl;
}
res[qrys[i].S]=n+od;
}
return res;
}