앤드루는 대회에 낼 프로그래밍 문제 n개를 만들었고, 이제 문제를 다듬으려고 한다. i번 문제를 준비하는 데 필요한 총 시간은 ti분이라고 추정했다. 앤드루는 친구들을 불러 이 일을 나눠 맡길 생각이다.
몇 명이 도와줄지는 아직 모르지만 일은 공평하게 나누고 싶다. 그래서 i번 문제마다 정수 xi를 정하고, 도와주는 친구는 모두 그 문제에 xi분씩 쓴다. 친구들이 i번 문제에 쓴 시간의 합이 ti분 이상이면 그 문제는 완전히 준비된 것이다. 친구가 k명일 때 xi는 k×xi≥ti를 만족하는 가장 작은 정수로 정한다.
앤드루는 문제의 난이도를 잘못 봤다는 것을 알아차리면 ti를 1 늘리거나 1 줄인다.
처음 추정한 ti가 주어진다. 쿼리 m개를 주어진 순서대로 처리하라. 각 쿼리는 다음 중 하나다.
1 i: 앤드루가 ti를 1 늘린다.2 i: 앤드루가 ti를 1 줄인다.3 k: 친구 k명이 도와준다면 친구 한 명이 문제 n개를 준비하는 데 몇 분을 쓰는지 앤드루가 알고 싶어 한다.첫째 줄에 문제의 개수 n과 쿼리의 개수 m이 주어진다. (1≤n,m≤105)
둘째 줄에 정수 t1,t2,…,tn이 주어진다. ti는 앤드루가 i번 문제에 대해 처음 추정한 시간이다. (1≤ti≤5×105)
다음 m개 줄에 쿼리가 한 줄에 하나씩, 두 정수 q와 v로 주어진다. q가 1이면 tv를 1 늘리고, 2이면 tv를 1 줄인다. 두 경우 모두 1≤v≤n이다. q가 3이면 친구 v명이 도와줄 때 친구 한 명이 쓰는 시간을 구해야 한다. 이 경우 1≤v≤5×105이다.
어떤 쿼리를 처리한 뒤에도 모든 ti는 1 이상 5×105 이하다.
q가 3인 쿼리마다 친구 한 명이 문제 n개를 준비하는 데 쓰는 시간의 합 x1+x2+⋯+xn을 한 줄에 하나씩 출력한다.