#include #include using namespace std; using namespace atcoder; typedef long long int ll; typedef long double ld; typedef vector vi; typedef vector vvi; typedef vector vvvi; typedef vector vvvvi; typedef vector vb; typedef vector vvb; typedef vector vvvb; typedef vector vvvvb; typedef pair pi; typedef pair ppi; typedef pair pppi; typedef pair ppppi; #define FOR(i,l,r) for(ll i=l;i=l;i--) #define RREP(i,n) RFOR(i,0,n) #define ALL(x) x.begin(),x.end() #define F first #define S second #define BS(A,x) binary_search(ALL(A),x) #define LB(A,x) (ll)(lower_bound(ALL(A),x)-A.begin()) #define UB(A,x) (ll)(upper_bound(ALL(A),x)-A.begin()) #define COU(A,x) (UB(A,x)-LB(A,x)) #define sz(c) ((ll)(c).size()) /* #include namespace mp=boost::multiprecision; using Bint=mp::cpp_int; */ templateusing min_priority_queue=priority_queue,greater>; templateostream&operator<<(ostream&os,pairp){os<istream&operator>>(istream&is,pair&p){is>>p.F>>p.S;return is;} templateostream&operator<<(ostream&os,vectorv){REP(i,sz(v))os<istream&operator>>(istream&is,vector&v){for(T&in:v)is>>in;return is;} templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b vm; typedef vector vvm; typedef vector vvvm; typedef vector vvvvm; ostream&operator<<(ostream&os,mint a){os<>(istream&is,mint&a){int x;is>>x;a=mint(x);return is;} //*/ int main(){ ll N,M;cin>>N>>M; vector>E(N); REP(i,M){ ll u,v;cin>>u>>v;u--;v--; E[u].insert(v); E[v].insert(u); } vi A(N);cin>>A; const ll B=320; vi sum(N); REP(i,N)if(sz(E[i])>=B)for(auto j:E[i])sum[i]+=A[j]; vector>BE(N); REP(i,N)for(auto j:E[i])if(sz(E[j])>=B)BE[i].insert(j); ll Q;cin>>Q; while(Q--){ ll t;cin>>t; if(t==1){ ll u,v;cin>>u>>v;u--;v--; if(E[u].count(v)){ E[u].erase(v); E[v].erase(u); if(sz(E[u])==B-1){ sum[u]=0; for(auto v:E[u])BE[v].erase(u); BE[v].erase(u); } if(sz(E[v])==B-1){ sum[v]=0; for(auto u:E[v])BE[u].erase(v); BE[u].erase(v); } if(sz(E[u])>=B)BE[v].erase(u),sum[u]-=A[v]; if(sz(E[v])>=B)BE[u].erase(v),sum[v]-=A[u]; } else{ E[u].insert(v); E[v].insert(u); if(sz(E[u])==B){ sum[u]=0; for(auto v:E[u])sum[u]+=A[v],BE[v].insert(u); } if(sz(E[v])==B){ sum[v]=0; for(auto u:E[v])sum[v]+=A[u],BE[u].insert(v); } if(sz(E[u])>B)BE[v].insert(u),sum[u]+=A[v]; if(sz(E[v])>B)BE[u].insert(v),sum[v]+=A[u]; } } else if(t==2){ ll i,x;cin>>i>>x;i--; for(auto j:BE[i])sum[j]+=x-A[i]; A[i]=x; } else{ ll v;cin>>v;v--; if(sz(E[v])>=B+10)cout<