#include <cstdio>
#include <iostream>
#include <cmath>
#include <cctype>
#include <algorithm>
#define _e putchar (' ')
#define _v putchar ('\n')
#define ll long long
#define File(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
using namespace std;
inline int mx (int x,int y) {
return x>y?x:y;
}
inline int mn(int x,int y) {
return x<y?x:y;
}
inline void r(int &x) {
int s=0,w=1;
char ch=getchar ();
while (ch>'9'||ch<'0') {if(ch=='-') w=-1; ch=getchar ();}
while (ch>='0'&&ch<='9') {s=(s<<1)+(s<<3)+(ch^48); ch=getchar ();}
x=s*w;
}
inline void wr (int x) {
if(x<0) x=-x,putchar (45);
if(x<10) {
putchar (x+48);
return ;
}
wr(x/10);
putchar (x%10+48);
}
const int N=100005,mod=998244353;
int n,m,k,q,sum[N],id,a[N],b[N][5];
struct node {
int s,lazy;
}tree[N*4];
inline void pushup (int u) {
tree[u].s=tree[u<<1].s+tree[u<<1|1].s;
}
inline void build (int lt,int rt,int u) {
tree[u].lazy=1;
if(lt==rt) {
a[++id]=u;
r(tree[u].s);
}
int mid=(lt+rt)>>1;
build (lt,mid,u<<1);
build (mid+1,rt,u<<1|1);
}
inline void pushdown (int lt,int rt,int u) {
if(lt==rt||tree[u].lazy==1) return ;
tree[u<<1].lazy*=tree[u].lazy%mod;
tree[u<<1|1].lazy*=tree[u].lazy%mod;
int mid=(lt+rt)>>1;
tree[u<<1].s*=(mid-lt+1)*tree[u].lazy%mod;
tree[u<<1|1].s*=(rt-mid)*tree[u].lazy%mod;
tree[u].lazy=1;
}
inline void update (int nowl,int nowr,int delta,int tarl,int tarr,int u){
if(nowl>=tarl&&nowr<=tarr) {
tree[u].lazy*=delta%mod;
tree[u].s*=(nowr-nowl+1)*delta%mod;
return ;
}
pushdown (nowl,nowr,u);
int mid=(nowl+nowr)>>1;
if(nowl<=mid) update(nowl,mid,delta,tarl,tarr,u<<1);
if(nowr>mid) update(mid+1,nowr,delta,tarl,tarr,u<<1|1);
pushup(u);
}
inline void work(int q) {
if(b[q][1]==1){
a[b[q][2]]=(a[b[q][2]]+b[q][3])%mod;
return ;
}
if(b[q][1]==2) {
for(int j=1;j<=n;j++)
a[j]=(a[j]*b[q][2])%mod;
return ;
}
if(b[q][1]==3)
for(int i=3;i<=b[q][2]+2;i++)
work(b[q][i]);
}
int main () {
File("call");
r(n);
for(int i=1;i<=n;i++)
r(a[i]);
r(m);
for(int i=1;i<=m;i++) {
r(b[i][1]);
if(b[i][1]==1) r(b[i][2]),r(b[i][3]);
if(b[i][1]==2) r(b[i][2]);
if(b[i][1]==3) {
r(b[i][2]);
for(int j=1;j<=b[i][2];j++)
r(b[i][j+2]);
}
}
r(k);
for(int i=1;i<=k;i++) {
r(q);
work(q);
}
for(int i=1;i<n;i++)
wr(a[i]%mod),_e;
wr(a[n]);
_v;
return 0;
}