#include <bits/stdc++.h>
#define fio ios_base::sync_with_stdio(0); cin.tie(0);
using namespace std;
vector<int> segt;
void build(int i, int l, int r, vector<int>& v){
if(l == r){
segt[i] = v[l];
}else{
int mid = (l+r)/2;
build(i*2, l ,mid, v);
build(i*2+1, mid+1, r, v);
segt[i] = segt[i*2]+segt[i*2+1];
}
}
void seti(int i, int l, int r, int pos, int val){
if(l == r){
segt[i] = val;
}else{
int mid = (l+r)/2;
if(pos <= mid){
seti(i*2, l, mid, pos, val);
}else{
seti(i*2+1, mid+1, r, pos, val);
}
}
}
int sumi(int i, int l, int r, int lb, int rb){
if(r < lb || l > rb){
return 0;
}else if(l >= lb && r <= rb){
return segt[i];
}else{
int mid = (l+r)/2;
return sumi(i*2, l, mid, lb, rb) + sumi(i*2+1, mid+1, r, lb, rb);
}
}
int main()
{
fio
int n, q, k;
cin >> n >> q >> k;
vector<int> v(n);
for(int i = 0; i < n; ++i){
cin >> v[i];
}
segt.resize(4*n);
build(1, 0, n-1, v);
for(int i = 0; i < q; ++i){
int op;
cin >> op;
if(op == 1){
int a, b;
cin >> a >> b;
--a;
seti(1, 0, n-1, a, b);
}else if(op == 2){
int l, r;
cin >> l >> r;
}else if(op == 3){
int l, r;
cin >> l >> r;
--l;
--r;
cout << sumi(1, 0, n-1, l, r);
}
}
return 0;
}