#include <bits/stdc++.h>
using namespace std;
long long m, L, R, k, t, p, tmp, n, a[300009];
long long ef1()
{
long long l=L, r=R, mid, ans=L-1;
while(l <= r)// 小于等于k的最大值
{
mid = (l+r)/2;
if(a[mid]+tmp <= k)
{
ans = mid;
l = mid+1;
}
else
r = mid-1;
}
return ans;
}
long long ef2()
{
long long l=L, r=R, mid, ans=R+1;
while(l <= r) //大于等于-k的最小值
{
mid = (l+r)/2;
if(a[mid]+tmp >= -k)
{
ans = mid;
r = mid-1;
}
else
l = mid+1;
}
return ans;
}
int main()
{
scanf("%lld%lld%lld", &n, &m, &k);
for(long long i=1; i<=n; i++)
scanf("%lld", &a[i]);
sort(a+1, a+n+1);
L = 1, R = n, tmp = 0;//偏移量
while(m--)
{
scanf("%lld", &t);
if(t == 3)
{
long long t1 = ef1();// 右端点值
long long t2 = ef2();// 左端点值
//cout << t2 << " " << t1 << " **" ;
printf("%lld\n", t1-t2+1); //cout << t1-t2+1 << endl;
L = t2; R = t1;
}
else
{
scanf("%lld", &p);//cin >> p;
if(t == 1)
tmp += p;
else
tmp -= p;
}
}
return 0;
}