一直WA
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+100;
const int inf=1e18+100;
int n,m,stp,dp[50009];
int dis[N],S[N],W[N],C[N];
int st[N],ed[N]; vector<int>g[N];
struct tree{
int l,r;
int mi,lz;
}t[N*2];
#define lson o<<1
#define rson o<<1|1
void push_up(int o){t[o].mi=min(t[lson].mi,t[rson].mi);}
void pushdown(int o){
if(!t[o].lz) return;
int x=t[o].lz; t[o].lz=0;
t[lson].mi+=x,t[lson].lz+=x;
t[rson].mi+=x,t[rson].lz+=x;
return;
}
void build(int o,int l,int r){
t[o].l=l,t[o].r=r;
if(l==r){
t[o].mi=dp[l],t[o].lz=0;
return;
}
int mid=(l+r)>>1;
build(lson,l,mid),build(rson,mid+1,r);
push_up(o);
return;
}
void update(int o,int l,int r,int val){
if(l>r) return;
if(t[o].l==l and t[o].r==r){
t[o].mi+=val,t[o].lz+=val;
return;
}
pushdown(o);
int mid=(t[o].l+t[o].r)>>1;
if(r<=mid) update(lson,l,r,val);
else if(l>mid) update(rson,l,r,val);
else update(lson,l,mid,val),update(rson,mid+1,r,val);
push_up(o);
return;
}
int query(int o,int l,int r){
if(l>r) return inf;
if(t[o].l==l and t[o].r==r) return t[o].mi;
pushdown(o);
int mid=(t[o].l+t[o].r)>>1;
if(r<=mid) return query(lson,l,r);
else if(l>mid) return query(rson,l,r);
else return min(query(lson,l,mid),query(rson,mid+1,r));
}
void deal(){
for(int i=1;i<=n;i++){
st[i]=lower_bound(dis+1,dis+1+n,dis[i]-S[i])-dis;
ed[i]=lower_bound(dis+1,dis+1+n,dis[i]+S[i])-dis;
if(dis[ed[i]]>dis[i]+S[i])ed[i]--;
g[ed[i]].push_back(i);
}
return;
}
signed main(){
cin>>n>>m;
for(int i=2;i<=n;i++) scanf("%lld",&dis[i]);
for(int i=1;i<=n;i++) scanf("%lld",&C[i]);
for(int i=1;i<=n;i++) scanf("%lld",&S[i]);
for(int i=1;i<=n;i++) scanf("%lld",&W[i]);
n++,m++;
dis[n]=W[n]=inf;
deal();
int ans=inf,now=0;
for(int i=1;i<=n;i++){
dp[i]=now+C[i];
for(int j=0;j<g[i].size();j++) now+=W[g[i][j]];
}
ans=min(ans,dp[n]);
for(int k=2;k<=m;k++){
build(1,1,n);
for(int i=1;i<=n;i++){
dp[i]=query(1,1,i-1)+C[i];
for(int j=0;j<g[i].size();j++) update(1,1,st[g[i][j]]-1,W[g[i][j]]);
}
ans=min(ans,dp[n]);
}
cout<<ans;
return 0;
}
/*
dp[i][k]=min{dp[j][k-1]+w(j,i)}+C[i];
dpi,k: 第i个位置放第k个基站
*/