#include using namespace std; typedef unsigned long long ull; typedef long long ll; #define FOR(i,a,b) for (ll i = (a); i < (b); i++) #define FFOR(i,a,b) for (ll i = (b); i >= (a); i--) #define rep(i,n) FOR(i,0,n) #define rrep(i,n) FFOR(i,0,n) #define YES cout << "Yes" << endl #define NO cout << "No" << endl template inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; } template inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; } const long long INF = 1LL<<60; const int MOD = 100000000; class fenwick_tree_set { const int n; int cnt; vector data; int find(int p) const { int res = 0; while (p > 0) { res += data[p]; p -= p & -p; } return res; } void add(int p, int x) { ++p; while (p <= n) { data[p] += x; p += p & -p; } } public: fenwick_tree_set(int maxi) : n(maxi + 1), cnt(0), data(n + 1) {} int size() const { return cnt; } int count(int val) const { return find(val + 1) - find(val); } void insert(int val) { add(val, 1); cnt += 1; } void erase(int val) { add(val, -1); cnt -= 1; } int kth_element(int k) const { int p = 1 << (32 - __builtin_clz(n)), res = 0; while (p >>= 1) { if (res + p <= n && data[res + p] <= k) { k -= data[res + p]; res += p; } } return res; } }; int main(){ int N,K,Q,q,x,a; cin>>N>>K>>Q; fenwick_tree_set f(N); rep(i,N){ cin>>a; f.insert(a); } rep(i,Q){ cin>>q; if(q==1){ cin>>x; f.insert(x); }else if(q==2){ cin>>x; int kk = f.kth_element(K-1); f.erase(kk); f.insert(kk+x); }else{ int kk = f.kth_element(K-1); cout<