#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5+5;
ll c[N];
int n, q, k, d;
class ST
{
private:
vector<ll> sum;
public:
ST(int nn)
{
sum.assign(4*N, 0);
}
ll add(int i, int l=1, int r=n, int cur=1)
{
if(i<l || r<i) return sum[cur];
if(l==r) return sum[cur] = c[i];
int m=((l+r)>>1), r1=(cur<<1), r2=((cur<<1)|1);
return sum[cur] = add(i,l,m,r1) + add(i,m+1,r,r2);
}
ll get_sum(int lg, int rg, int l=1, int r=n, int cur=1)
{
if(r<lg || rg<l) return 0;
if(lg<=l && r<=rg) return sum[cur];
int m=((l+r)>>1), r1=(cur<<1), r2=((cur<<1)|1);
return get_sum(lg,rg,l,m,r1)+get_sum(lg,rg,m+1,r,r2);
}
};
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n >> q >> k;
ST sk(n);
set<int> st;
for(int i=1; i<=n; i++)
{
cin >> c[i];
st.insert(i);
sk.add(i);
}
while(q--)
{
int s, t, u; cin >> s >> t >> u;
if(s==1)
{
c[t] = u;
sk.add(t);
st.insert(t);
}
if(s== && k!=1)
{
int p = t;
for(auto it=st.lower_bound(p); it!=st.end(); it=st.upper_bound(p))
{
p = *it;
if(p > u) break;
c[p]/=k;
sk.add(p);
if(c[p]==0) st.erase(it);
}
}
if(s==3) cout << sk.get_sum(t, u) << '\n';
}
return 0;
}