# include using namespace std; #pragma GCC optimize ("O3") #pragma GCC target ("sse4") const long long maxn = 1e6+5; struct node { long long br; long long minleft; long long sum; long long lazy; }; node segm[maxn]; long long w[maxn]; long long N,M; long long MIN(long long a, long long b) { if(a>b)return b; return a; } void recalc(long long v, long long from, long long to) { segm[v].minleft-=segm[v].lazy; segm[v].sum+=(segm[v].br*segm[v].lazy); if(from!=to) { segm[2*v].lazy+=segm[v].lazy; segm[2*v+1].lazy+=segm[v].lazy; } segm[v].lazy = 0; } void update(long long v, long long from, long long to, long long x, long long y,long long d) { if(x<=from&&to<=y) { segm[v].lazy+=d; recalc(v,from,to); return ; } recalc(v,from,to); long long mid = (from+to)/2; if(x<=mid)update(2*v,from,mid,x,y,d); if(y>mid)update(2*v+1,mid+1,to,x,y,d); //segm[v].br = segm[2*v].br+segm[2*v+1].br; segm[v].minleft = MIN(segm[2*v].minleft,segm[2*v+1].minleft); segm[v].sum = segm[2*v].sum+segm[2*v+1].sum; return ; } long long query(long long v, long long from, long long to, long long x, long long y) { if(from>to)return 0; recalc(v,from,to); // cout<mid)res+=query(2*v+1,mid+1,to,x,y); // segm[v].br = segm[2*v].br+segm[2*v+1].br; // segm[v].minleft = MIN(segm[2*v].minleft,segm[2*v+1].minleft); // segm[v].sum = segm[2*v].sum+segm[2*v+1].sum; return res; } void restore(long long v, long long from, long long to) { if(from>to)return ; recalc(v,from, to); if(segm[v].minleft>0)return ; if(from==to) { segm[v].minleft = 1e18; segm[v].br = 0; segm[v].sum = M; return ; } long long mid = (from+to)/2; restore(2*v,from,mid); restore(2*v+1,mid+1,to); segm[v].br = segm[2*v].br+segm[2*v+1].br; segm[v].minleft = MIN(segm[2*v].minleft,segm[2*v+1].minleft); segm[v].sum = segm[2*v].sum+segm[2*v+1].sum; } void build(int v, int from, int to) { if(from>to)return ; if(from==to) { //if(from>N)return ; segm[v].br = 1; segm[v].lazy = 0; segm[v].sum = w[from]; segm[v].minleft = M-segm[v].sum; return ; } long long mid = (from+to)/2; build(2*v,from,mid); build(2*v+1,mid+1,to); segm[v].br = segm[2*v].br+segm[2*v+1].br; segm[v].minleft = MIN(segm[2*v].minleft,segm[2*v+1].minleft); segm[v].sum = segm[2*v].sum+segm[2*v+1].sum; segm[v].lazy = 0; } int main() { freopen ("investments.in", "r", stdin); freopen ("investments.out", "w" , stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); long long k; cin>>N>>M>>k; long long i,j; long long x,u,v,y; for(i=1;i<=N;i++)cin>>w[i]; build(1,1,N); //restore(1,1,N); // cout<<"OK"<>x; if(x==1) { cin>>u>>v>>y; update(1,1,N,u,v,y); restore(1,1,N); } else { cin>>u>>v; cout<