#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#define fio ios_base::sync_with_stdio(0);cin.tie(0);
#define ll long long
#define ld long double
#define en exit(0);
#define pb push_back
#define fi first
#define se second
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1e5 + 5;
ll segt[4 * N];
int c[N], n;
void upd(int p, int v, int l = 1, int r = n, int pos = 1)
{
if(l == r)
segt[pos] = v;
else
{
int mid = (l + r) / 2;
if(p <= mid)
upd(p, v, l, mid, pos * 2);
else
upd(p, v, mid + 1, r, pos * 2 + 1);
segt[pos] = segt[pos * 2] + segt[pos * 2 + 1];
}
}
ll getsum(int lb, int rb, int l = 1, int r = n, int pos = 1)
{
if(rb < l || r < lb)
return 0;
if(lb <= l && r <= rb)
return segt[pos];
int mid = (l + r) / 2;
return getsum(lb, rb, l, mid, pos * 2) + getsum(lb, rb, mid + 1, r, pos * 2 + 1);
}
int main()
{
fio
// ifstream cin("in.in");
int q, k;
cin >> n >> q >> k;
for(int i = 1;i <= n;i++)
{
cin >> c[i];
upd(i, c[i]);
}
while(q--)
{
int t;
cin >> t;
if(t == 1)
{
int p, v;
cin >> p >> v;
upd(p, v);
}
else if(t == 2)
{
int l, r;
cin >> l >> r;
// nothing happens, because k = 1
}
else
{
int l, r;
cin >> l >> r;
cout << getsum(l, r) << "\n";
}
}
return 0;
}