#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
long long n,q,W;
long long a[N<<2],tap[N<<2],ans[N<<2],lg[N],sum,aans;
inline long long ls(long long x){
return x<<1;
}
inline long long rs(long long x) {
return x<<1|1;
}
inline void push_up(long long p){
ans[p]=ans[ls(p)]+ans[rs(p)];
}
void build(long long p,long long l,long long r){
tap[p]=0;
if(l==r){ans[p]=a[l];return;}
long long mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
push_up(p);
}
inline void f(long long p,long long l,long long r,long long k){
ans[p]=ans[p]+(r-l+1)*k;
tap[p]=tap[p]+k;
}
inline void push_down(long long p,long long l,long long r){
long long mid=(l+r)>>1;
f(ls(p),l,mid,tap[p]);
f(rs(p),mid+1,r,tap[p]);
tap[p]=0;
}
inline void update(long long nl,long long nr,long long l,long long r,long long p,long long k){
if(nl<=l&&nr>=r){
ans[p]=ans[p]+k*(r-l+1);
tap[p]=tap[p]+k;
return ;
}
push_down(p,l,r);
long long mid=(l+r)>>1;
if(nl<=mid) update(nl,nr,l,mid,ls(p),k);
if(nr>mid) update(nl,nr,mid+1,r,rs(p),k);
push_up(p);
}
inline long long query(long long x,long long y,long long l,long long r,long long p){
long long res=0;
if(x<=l&&y>=r)return ans[p];
long long mid=(l+r)>>1;
push_down(p,l,r);
if(x<=mid) res+=query(x,y,l,mid,ls(p));
if(y>mid) res+=query(x,y,mid+1,r,rs(p));
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>q>>W;
for(long long i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
lg[0]=1;
for(int i=1;i<=65;i++){
lg[i]=lg[i-1]*2;
if(lg[i]>W) break;
}
int l,r,mid;
long long w,cnt;
long long x,y,z;
for(long long i=1;i<=q;i++){
aans=0;
cin>>x>>y>>z;
update(x,y,1,n,1,z);
sum=query(1,n,1,n,1);
w=W;
cnt=1;
while(w>sum*lg[cnt-1]){
w-=sum*lg[cnt-1];
cnt++;
}
aans=(cnt-1)*n;
l=1,r=n,mid;
while(l<=r){
mid=(l+r)>>1;
if(query(1,mid,1,n,1)*lg[cnt-1]>=w) r=mid-1;
else l=mid+1;
}
aans=aans+l-1;
cout<<aans<<"\n";
}
return 0;
}