#include<iostream>
using namespace std;
const int N=2e5+10;
int n,q,w;
long long l,r,d;
long long rubbish[N];
long long sum[4*N];
long long tag[4*N];
void pushup(int o){
sum[o]=sum[o<<1]+sum[(o<<1)+1];
}
void build(int o,int l,int r){
if(l==r){
sum[o]=rubbish[l];
return;
}
long long mid=(l+r)>>1;
build(o<<1,l,mid);
build((o<<1)+1,mid+1,r);
pushup(o);
}
void pushdown(int o,int l,int r){
long long mid=(l+r)>>1;
sum[o<<1]+=(mid-l+1)*tag[o];
sum[(o<<1)+1]+=(r-mid)*tag[o];
tag[o<<1]=tag[o];
tag[(o<<1)+1]=tag[o];
tag[o]=0;
}
void modify(int o,int l,int r,int ql,int qr,int g){
if(qr<l||ql>r){
return;
}
if(l>=ql&&r<=qr){
sum[o]+=g*(r-l+1);
tag[o]+=g;
return;
}
long long mid=(l+r)>>1;
pushdown(o,l,r);
if(mid>=ql){
modify(o<<1,l,mid,ql,qr,g);
}
if(mid<qr){
modify((o<<1)+1,mid+1,r,ql,qr,g);
}
pushup(o);
}
long long ans;
long long k=1;
long long g=w;
void qry(int o,int l,int r){
if(l==r){
return;
}
long long mid=(l+r)>>1;
pushdown(o,l,r);
if(g>sum[o<<1]*k){
g-=sum[o<<1]*k;
ans+=mid-l+1;
qry((o<<1)+1,mid+1,r);
}else{
qry(o<<1,l,mid);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>q>>w;
for(int i=1;i<=n;i++){
cin>>rubbish[i];
}
build(1,1,n);
while(q--){
ans=0;
cin>>l>>r>>d;
modify(1,1,n,l,r,d);
k=1;
g=w;
while(g>sum[1]*k){
g-=sum[1]*k;
k*=2;
ans+=n;
}
qry(1,1,n);
cout<<ans<<endl;
}
return 0;
}