#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const long long pi=1e7+19;
const long long ni=2e5;
#include<unordered_map>
unordered_map<long long,long long>mp;
void solve();
long long ai[ni],bi[ni],ksn[ni*51],t,n,m;
long long add,mul=1,sum,ans;
struct quert{long long op,a,b;}q[ni];
int main(){solve();return 0;}
void solve(){
ksn[1]=1;
for(int i=2;i<pi;i++)ksn[i]=(pi-pi/i)*ksn[pi%i]%pi;
scanf("%lld%lld",&n,&m);
for(long long i=1;i<=m;i++){
long long a,b=0,c=0;scanf("%lld",&a);
if(a!=6)scanf("%lld",&b);
if(a==1)scanf("%lld",&c);
b=(b%pi+pi)%pi;c=(c%pi+pi)%pi;
q[i]={a,b,c};
}
scanf("%lld",&t);bi[0]=1;ai[0]=-1;
for(long long i=1;i<=t;i++)
scanf("%lld%lld",&ai[i],&bi[i]);
for(long long ki=m+1;ki<=m*t+m;ki++){
long long i=(ai[(ki-1)/m]+bi[(ki-1)/m]*(ki%m)%m+m)%m+1;
long long a=q[i].a,b=q[i].b;
switch(q[i].op){
case 1:(sum+=b-mp[a]*mul%pi-add+pi)%=pi;b+=pi-add;(b*=ksn[mul])%=pi;mp[a]=b;break;
case 2:(add+=a)%=pi;(sum+=n*a%pi)%=pi;break;
case 3:if(a==0)goto W;(mul*=a)%=pi;(add*=a)%=pi;(sum*=a)%=pi;break;
case 4:W:mul=1;sum=a*n%pi;add=a%pi;mp.clear();break;
case 5:(ans+=mp[a]*mul%pi+add)%=pi;break;
case 6:(ans+=sum)%=pi;break;
}
}
printf("%lld",(ans+pi)%pi);cerr<<ans%pi<<endl;
}