#include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) static const double pi = 3.141592653589793; const ll INF = 1LL << 60; const ll mod = 1000000007; const ll imod = 998244353; using mint = modint998244353; vector dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1}; ll P(ll x, ll n) { ll ret = 1; while (n > 0) { if (n & 1) ret *= x; x *= x; n >>= 1; } return ret; } void seek(bool f){ cout << (f ? "Yes" : "No") << endl; } int main(){ ll N, K, Q; cin >> N >> K >> Q; vector A(N); rep(i, N){ cin >> A[i]; } sort(A.begin(), A.end()); priority_queue, greater> PQ2; priority_queue PQ1; rep(i, K){ PQ1.push(A[i]); } for(int i = K; i < N; i++){ PQ2.push(A[i]); } while(Q--){ int op; cin >> op; if(op == 1){ ll x; cin >> x; if(PQ1.top() <= x){ PQ2.push(x); } else{ PQ2.push(PQ1.top()); PQ1.pop(); PQ1.push(x); } } if(op == 2){ ll y; cin >> y; ll c = PQ1.top(); PQ1.pop(); c += y; if(!PQ2.empty() and c > PQ2.top()){ PQ1.push(PQ2.top()); PQ2.pop(); PQ2.push(c); } else{ PQ1.push(c); } } if(op == 3){ cout << PQ1.top() << endl; } } }