#include #include #define chmin(x,y) (x) = min((x),(y)) #define chmax(x,y) (x) = max((x),(y)) #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define vec vector #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define pb push_back #define eb emplace_back using namespace std; using namespace atcoder; using ll = long long; using ld = long double; const ll mod = 998244353; using mint = modint998244353; const vector dx = {1,0,-1,0}, dy = {0,1,0,-1}; // using Graph = vector>>; using Graph = vector>; int main(){ // input int N,K,Q; cin >> N >> K >> Q; multiset ms; vector A(N); rep(i,N){ cin >> A[i]; ms.insert(A[i]); } ms.insert(0LL); ms.insert(9e18); // A.pb(1e18); // A.pb(0LL); sort(all(A)); ll kth = A[K-1]; // solve while(Q--){ int q; cin >> q; // cout << "Type " << q << " " << Q << " more queries " << (ms.find(kth) != ms.end() ? "Yes" : "No") << endl; if(q == 3){ cout << kth << "\n"; } else if(q == 2){ ll y; cin >> y; auto it = ms.lower_bound(kth); auto nxt = next(it); ll upd = kth + y; kth = min(upd, *nxt); ms.erase(it); ms.insert(upd); } else if(q == 1){ ll x; cin >> x; auto it = ms.lower_bound(kth); auto prv = prev(it); chmin(kth, max(x, *prv)); ms.insert(x); } } // output }