ll@N,@A[N],@Q;int C=25,P[C];Prime(99,P);segtreeT[C];rep[T,c](t,C){t.malloc(N);t.setN(N,1,0);rep[t,i](s,N)while(A[i]%P[c]<1)A[i]/=P[c],s++;t.build();}rep(Q){ll@(n,--l,r,x),a=1;VI e(C);if(n<3)rep[P,c](p,C)while(x%p<1)x/=p,e[c]++;rep[T,c](t,C){if(n<2)t.change(l,r,e[c]);else if(n<3)t.add(l,r,e[c]);else P[c]<=x?a=a*(t.getSum(l,r)+1)%998244353:a;}if(n>2)wt(a);}