#include #include using namespace std; using namespace atcoder; using mint = modint998244353; //using mint = modint1000000007; typedef long long ll; typedef pair P; typedef tuple T; templatebool chmax(T& a, const T& b) { if (a < b) { a = b;return true; } else { return false; } } templatebool chmin(T& a, const T& b) { if (a > b) { a = b;return true; } else { return false; } } template void dbg(Args&&... args) { ((cout << args << ' '), ...);cout << '\n'; } const int di[] = { -1,0,1,0 }; const int dj[] = { 0,-1,0,1 }; const long long INF = 6000000000000000000; const int inf = 1001001001; int main(void) { int n, k, q; cin >> n >> k >> q; vector a(n, 0); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); multiset sts, stb; for (int i = 0; i < k; i++) { sts.insert(a[i]); } for (int i = k; i < n; i++) { stb.insert(a[i]); } while (q--) { int r; cin >> r; if (r == 1) { ll x; cin >> x; ll temp = *sts.rbegin(); if (temp <= x)stb.insert(x); else { sts.erase(sts.find(temp)); stb.insert(temp); sts.insert(x); } } else if (r == 2) { ll x; cin >> x; x += *sts.rbegin(); sts.erase(sts.find(*sts.rbegin())); sts.insert(*stb.begin()); stb.erase(stb.find(*stb.begin())); ll temp = *sts.rbegin(); if (temp <= x)stb.insert(x); else { sts.erase(sts.find(temp)); stb.insert(temp); sts.insert(x); } } else { cout << *sts.rbegin() << "\n"; } } }