#include<bits/stdc++.h>
#define MAXN 1000007
using namespace std;
const int inf=1e9+7;
int n,q;
long long s,sum[MAXN];
vector<int> curr;
struct SegmentTree{
struct node{
int minv,maxv;
int lazy;
inline friend node operator + (node fr,node sc){
node res={min(fr.minv,sc.minv),max(fr.maxv,sc.maxv),0};
return res;
}
};
node tree[4*MAXN];
int cap;
void add(int v,int val){
tree[v].lazy+=val;
tree[v].minv+=val;
tree[v].maxv+=val;
}
void psh(int v){
if(tree[v].lazy==0)return;
tree[2*v].minv+=tree[v].lazy;
tree[2*v].maxv+=tree[v].lazy;
tree[2*v].lazy+=tree[v].lazy;
tree[2*v+1].minv+=tree[v].lazy;
tree[2*v+1].maxv+=tree[v].lazy;
tree[2*v+1].lazy+=tree[v].lazy;
tree[v].lazy=0;
}
void update(int v,int l,int r,int ll,int rr,int s){
if(ll>rr)return;
if(l==ll and r==rr){
add(v,s);
}else{
int tt=(l+r)/2;
psh(v);
update(2*v,l,tt,ll,min(tt,rr),s);
update(2*v+1,tt+1,r,max(tt+1,ll),rr,s);
tree[v] = tree[2*v] + tree[2*v+1];
}
}
int getv(int v,int l,int r,int pos){
if(l==r){
return tree[v].lazy;
}else{
int tt=(l+r)/2;
psh(v);
if(pos<=tt)return getv(2*v,l,tt,pos);
else return getv(2*v+1,tt+1,r,pos);
}
}
void fix(int v,int l,int r){
if(tree[v].minv>=0 and tree[v].maxv<=cap)return;
int tt=(l+r)/2;
if(tree[v].maxv<0){
add(v,-tree[v].maxv);
}
if(tree[v].minv>cap){
add(v,cap-tree[v].minv);
}
psh(v);
fix(2*v,l,tt);
fix(2*v+1,tt+1,r);
tree[v]=tree[2*v]+tree[2*v+1];
}
}seg;
vector<int> distribute_candies(vector<int> c,vector<int> l,vector<int> r,vector<int> v){
n=int(c.size()); q=int(l.size());
seg.cap = c[0];
for(int i=0;i<q;i++){
seg.update(1,1,n,l[i]+1,r[i]+1,v[i]);
seg.fix(1,1,n);
}
curr.resize(n);
for(int i=0;i<n;i++){
curr[i]=seg.getv(1,1,n,i+1);
}
return curr;
}
/*int main(){
auto s = distribute_candies({15, 15, 15}, {0, 0}, {2, 1}, {20,20});
for(auto i:s){
cout<<i<<" ";
}
return 0;
}*/