#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int>p2;
const int N=3e5+10;
const int mod=1e9+7;
ll a[N];
int pos[N];
set<int>s;
struct info{
ll sum;
info(){
};
info(ll s):sum(s){
};
};
struct tag{
ll first,deta;
};
struct Node{
int l,r;
info val;
tag t;
}seg[4*N];
info operator +(const info&l,const info&r){
info a;
a.sum=(l.sum+r.sum);
return a;
}
ll calc(int u,ll first,ll deta){
return (first+first+(seg[u].r-seg[u].l)*deta)*(seg[u].r-seg[u].l+1)/2;
}
void settag(int u,tag t){
seg[u].val.sum=calc(u,t.first,t.deta);
seg[u].t=t;
}
void pushup(int u){
seg[u].val=seg[u<<1].val+seg[u<<1|1].val;
}
void pushdown(int u){
if(seg[u].t.deta!=0){
settag(u*2,seg[u].t);
settag(u*2+1,seg[u].t);
seg[u].t.deta=0;
}
}
void build(int u,int l,int r){
seg[u].l=l,seg[u].r=r;
if(l==r){
if(a[l]) seg[u].val=info(0);
else{
auto it=lower_bound(s.begin(),s.end(),l),L=it,R=it;
L--;
int x=*L,y=*R;
seg[u].val=info(a[x]*(y-l));
}
return;
}
else{
int mid=(l+r)>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
}
void modify(int u,int l,int r,tag d){
if(l>r) return ;
if(seg[u].l>=l && seg[u].r<=r){
settag(u,d);
return;
}
else{
pushdown(u);
int mid=(seg[u].l+seg[u].r)>>1;
if(r<=mid ) modify(u<<1,l,r,d);
else if(l>mid) modify(u<<1|1,l,r,d);
else{
modify(u<<1,l,r,d);
ll first=d.first,deta=d.deta;
tag t1;
t1.first=first+deta*(mid-seg[u].l);
t1.deta=d.deta;
modify(u<<1|1,l,r,t1);
}
pushup(u);
}
}
info query(int u,int ql,int qr){
if(ql<=seg[u].l && qr>=seg[u].r) return seg[u].val;
pushdown(u);
int mid=(seg[u].l+seg[u].r)>>1;
if(qr<=mid ) return query(u<<1,ql,qr);
else if(ql>mid) return query(u<<1|1,ql,qr);
else return query(u<<1,ql,qr)+query(u<<1|1,ql,qr);
}
int main()
{
int n,m,q;
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=m;i++) {
scanf("%d",&pos[i]);
s.insert(pos[i]);
}
for(int i=1;i<=m;i++) {
int x;
scanf("%d",&x);
a[pos[i]]=x;
}
build(1,1,n);
while(q--){
int op;
scanf("%d",&op);
if(op==1){
int x,v;
scanf("%d%d",&x,&v);
auto it=lower_bound(s.begin(),s.end(),x),L=it,R=it;
L--;
int l=*L,r=*R;
modify(1,l+1,x-1,{a[l]*(x-l-1),-a[l]});
modify(1,x+1,r-1,{v*(r-x-1),-v});
modify(1,x,x,{0,0});
}else{
int l,r;
scanf("%d%d",&l,&r);
printf("%lld\n",query(1,l,r).sum);
}
}
return 0;
}