#include<iostream>//双向队列
#include<cstdio>
#include<deque>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
long long a[400000];
deque<long long> q;
long long n,m,k,sum=0;
int main()
{
freopen("P7505.in","r",stdin);
freopen("P7505.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=n;i>=1;i--)
q.push_front(a[i]);
for(int i=1;i<=m;i++)
{
int kk;
cin>>kk;
long long lenth=q.size();
if(kk==1)
{
long long start=0,zk=lenth,lk=lenth;
long long aa;
cin>>aa;
sum+=aa;
while(lk!=0)
{
long long z=q.back();
if(z+sum>k)
{zk--;
q.pop_back();
start++;
continue;}
else
break;
}
q.resize(zk);
}
if(kk==2)
{
long long start=0,zk=lenth;
long long aa;
cin>>aa;
sum-=aa;
while(start+1<=lenth)
{
long long z=q.front();
if(z+sum<-k)
{
zk--;
q.pop_front();
start++;
continue;
}
else
break;
}
q.resize(zk);
}
if(kk==3)
{
cout<<q.size()<<endl;
}
}
return 0;
}