var n,m,k,a,b,i,j,op:integer;
q:array [0..2000,0..2000] of longint;
z:longint;
f,g:text;
procedure citire;
var i,j,x,y:integer;
begin
readln(f,n,m,z,a,b);
for i:=0 to n-1 do
for j:=0 to n-1 do q[j,i]:=((a+j)*(i+b) div 4) mod z;
end;
procedure op1(i,j:integer);
var x,y,a,b:integer;
aux:longint;
begin
for x:=i to j-1 do
for y:=x to j-1 do
begin
a:=j+(i-x);
b:=j+(i-y);
aux:=q[x,y];
q[x,y]:=q[a,b];
q[a,b]:=aux;
end;
end;
procedure op2(i,j:integer);
var x,y:integer;
s:longint;
begin
s:=0;
for x:=i to j do
for y:=i to j do s:=s+q[x,y];
writeln(g,s);
end;
procedure tmod;
var t,s:int64;
i,j:integer;
begin
t:=0;
for i:=0 to n-1 do
begin
s:=0;
for j:=0 to n-1 do s:=s+q[i,j];
t:=t+(s*s*(i+1));
end;
writeln(g,t mod 4294967296);
end;
begin
assign(f,'eprubeta.in');
assign(g,'eprubeta.out');
reset(f);
rewrite(g);
citire;
for k:=1 to m do
begin
readln(f,op,i,j);
if op=1 then op1(i,j)
else op2(i,j);
end;
tmod;
close(f);
close(g);
end.