def PartitionOfUnity(p,q): if q==0:return abs(p),1-2*(p<0),q g,c,d=PartitionOfUnity(q,p%q) return g,d,c-p//q*d def ChineseRemainderTheorem(p,s,q,t): g,u,v=PartitionOfUnity(p,q) a=-1if s%g!=t%g else(s%g+t//g*p*u+s//g*q*v)%(p*q//g) return g,a class DynamicChineseRemiderTheorem: def __init__(self): self.mod=1 self.ans=0 self.div=[] self.len=0 def append(self,base,res): assert base if self.len:self.len+=1;return g,a=ChineseRemainderTheorem(self.mod,self.ans,base,res) if a<0:self.len=1;return self.div+=[base//g] self.mod,self.ans=self.mod*self.div[-1],a def pop(self,n): for i in R(n): if self.len:self.len-=1 else:self.mod//=self.div.pop() if self.len<1:self.ans%=self.mod def Get(self): return -1if self.len else self.ans R=range J=lambda:map(int,input().split()) dcrt=DynamicChineseRemiderTheorem() for q in R(sum(J())): t,*v=J() if t<2:dcrt.append(v[0],v[1]) elif t<3:dcrt.pop(v[0]) else:a=dcrt.Get();print(a if a<0 else a%v[0])