브리즈번 시가 돌연변이로 거대해진 웜뱃(호주에 사는, 너구리를 닮은 동물)에게 점령당했습니다. 여러분의 임무는 사람들을 남쪽으로 안전하게 구조하는 것입니다.
브리즈번의 도로는 커다란 격자 형태입니다. 동서 방향(가로)으로 놓인 수평 도로가 R개 있고 북쪽에서 남쪽으로 0,1,…,R−1번이 매겨져 있습니다. 남북 방향(세로)으로 놓인 수직 도로가 C개 있고 서쪽에서 동쪽으로 0,1,…,C−1번이 매겨져 있습니다. 아래 그림은 이렇게 번호가 매겨진 도로의 예입니다.

웜뱃은 북쪽에서 내려오고 사람들은 남쪽으로 도망칩니다. 사람은 가로 방향으로는 동쪽이든 서쪽이든 자유롭게 움직일 수 있지만, 세로 방향으로는 안전한 남쪽으로만 이동할 수 있습니다.
수평 도로 P번과 수직 도로 Q번이 만나는 교차로를 (P,Q)로 나타냅니다. 이웃한 두 교차로를 잇는 각 도로 세그먼트에는 웜뱃이 있을 수 있으며, 그 마릿수는 시간이 지나면서 바뀔 수 있습니다. 여러분은 북쪽 끝(수평 도로 0번)의 한 교차로에 도착한 사람을 남쪽 끝(수평 도로 R−1번)의 지정된 교차로까지, 지나는 동안 만나는 웜뱃 마릿수의 합이 최소가 되도록 안내해야 합니다.
먼저 격자의 크기와 각 도로 세그먼트의 웜뱃 마릿수가 주어집니다. 이어서 E개의 이벤트가 차례로 발생하며, 각 이벤트는 다음 두 종류 중 하나입니다.

위 그림은 수평 도로가 R=3개, 수직 도로가 C=4개인 지도의 초기 상태로, 각 세그먼트의 웜뱃 마릿수가 표시되어 있습니다. 이제 다음 순서로 이벤트가 일어난다고 합시다.

세 번째 사람이 다시 교차로 A=(0,2)에 도착해 교차로 B=(2,1)로 도망치려 합니다. 이번에는 만나는 웜뱃 마릿수의 최솟값이 5입니다.
도로의 구조와 각 세그먼트의 웜뱃 마릿수, 그리고 이벤트가 발생 순서대로 주어질 때 이를 처리하는 프로그램을 작성하세요.
첫째 줄에 수평 도로의 수 R과 수직 도로의 수 C가 공백으로 구분되어 주어집니다. (2≤R≤5000, 1≤C≤200)
이어지는 R개의 줄에는 수평 세그먼트 정보가 주어집니다. i번째 줄(0≤i≤R−1)에는 C−1개의 정수 H[i][0]부터 H[i][C-2]까지가 주어지며, H[i][j]는 교차로 (i,j)와 (i,j+1) 사이 수평 세그먼트의 웜뱃 마릿수입니다.
그다음 R−1개의 줄에는 수직 세그먼트 정보가 주어집니다. i번째 줄(0≤i≤R−2)에는 C개의 정수 V[i][0]부터 V[i][C-1]까지가 주어지며, V[i][j]는 교차로 (i,j)와 (i+1,j) 사이 수직 세그먼트의 웜뱃 마릿수입니다.
그다음 줄에 이벤트의 수 E가 주어집니다.
이어지는 E개의 줄에는 이벤트가 발생 순서대로 한 줄에 하나씩 주어집니다. 각 이벤트는 다음 세 형식 중 하나입니다.
1 P Q W: 교차로 (P,Q)와 (P,Q+1) 사이 수평 세그먼트의 웜뱃 마릿수를 W로 바꿉니다. (0≤P≤R−1, 0≤Q≤C−2, 0≤W≤1000)2 P Q W: 교차로 (P,Q)와 (P+1,Q) 사이 수직 세그먼트의 웜뱃 마릿수를 W로 바꿉니다. (0≤P≤R−2, 0≤Q≤C−1, 0≤W≤1000)3 V1 V2: 교차로 (0,V1)에서 (R−1,V2)로 이동할 때 만나는 웜뱃 마릿수의 최솟값을 묻습니다. (0≤V1≤C−1, 0≤V2≤C−1)1번과 2번 이벤트는 합쳐서 최대 500번, 3번 이벤트는 최대 200000번 발생합니다. 어느 시점에서든 한 세그먼트의 웜뱃 마릿수는 항상 1000 이하입니다.
3번 이벤트가 발생할 때마다, 교차로 (0,V1)에서 (R−1,V2)로 이동할 때 만나는 웜뱃 마릿수의 최솟값을 발생한 순서대로 한 줄에 하나씩 출력합니다.