#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,q,w;
int a[200009];
struct st{
int l,r;
int ans,laz;
}f[1000009];
inline void pushdown(int t){
if(f[t].l!=f[t].r){
f[2*t].laz+=f[t].laz;
f[2*t].ans+=f[t].laz*(f[2*t].r-f[2*t].l+1);
f[2*t+1].laz+=f[t].laz;
f[2*t+1].ans+=f[t].laz*(f[2*t+1].r-f[2*t+1].l+1);
}
f[t].laz=0;
}
inline void pushup(int t){
pushdown(t);
f[t].ans=f[2*t].ans+f[2*t+1].ans;
}
inline void build(int t,int l,int r){
f[t].l=l;
f[t].r=r;
f[t].laz=0;
if(l==r){
f[t].ans=a[l];
return;
}
int mid;
mid=l+r;
mid>>=1;
build(2*t,l,mid);
build(2*t+1,mid+1,r);
pushup(t);
}
inline void add(int t,int l,int r,int d){
pushdown(t);
if(f[t].l==l&&f[t].r==r){
f[t].ans+=(r-l+1)*d;
f[t].laz+=d;
return;
}
int mid;
mid=f[t].l+f[t].r;
mid>>=1;
if(r<=mid){
add(2*t,l,r,d);
}else if(l>mid){
add(2*t+1,l,r,d);
}else{
add(2*t,l,mid,d);
add(2*t+1,mid+1,r,d);
}
pushup(t);
}
inline int query(int t,int l,int r){
pushdown(t);
if(f[t].l==l&&f[t].r==r){
return f[t].ans;
}
int mid;
mid=f[t].l+f[t].r;
mid>>=1;
if(r<=mid){
return query(2*t,l,r);
}else if(l>mid){
return query(2*t+1,l,r);
}else{
return query(2*t,l,mid)+query(2*t+1,mid+1,r);
}
}
inline int ef(int t,int l,int r,int &w,int z){
if(w<=0){
return 0;
}
pushdown(t);
if(f[t].l==f[t].r){
w-=f[t].ans*z;
return 1;
}
if(f[t].l==l&&f[t].r==r){
if(w>f[t].ans*z){
w-=f[t].ans*z;
return r-l+1;
}
int mid;
mid=l+r;
mid>>=1;
if(w>f[2*t].ans*z){
w-=f[2*t].ans*z;
return mid-l+1+ef(2*t+1,mid+1,r,w,z);
}else{
return ef(2*t,l,mid,w,z);
}
}
int mid;
mid=f[t].l+f[t].r;
mid>>=1;
if(r<=mid){
return ef(2*t,l,r,w,z);
}else if(l>mid){
return ef(2*t+1,l,r,w,z);
}else{
return ef(2*t,l,mid,w,z)+ef(2*t+1,mid+1,r,w,z);
}
}
inline int quetion(int l,int r){
int ww;
ww=w;
int zz;
zz=query(1,l,r);
int c;
c=1;
int ans;
ans=0;
while(c*zz<ww){
ww-=c*zz;
c*=2;
ans+=r-l+1;
}
ans+=ef(1,l,r,ww,c);
ans--;
return ans;
}
signed main(){
cin.tie();
cout.tie();
std::ios::sync_with_stdio(0);
cin>>n>>q>>w;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
while(q--){
int l,r,d;
cin>>l>>r>>d;
add(1,l,r,d);
cout<<quetion(1,n)<<"\n";
}
return 0;
}