program liangshui;
const
max=600000;
type
tlist=record {结点类型}
father:longint;
dep:byte;
a:integer;
b:integer;
end;
var
list:array[0..max] of tlist; {扩展出的中间结点序列}
head,foot,best,i:longint;
m,n,k:integer;
answer:longint;
found:boolean;
procedure init; {初始化过程}
var
i:byte;
begin
assign(input,'ls.in');
reset(input);
assign(output,'ls.out');
rewrite(output);
fillchar(list,sizeof(list),0);
found:=false;
head:=0; {队列初始化,队首指针head,队尾指针foot}
foot:=1;
with list[1] do {初始结点作为队列第一个结点}
begin
a:=0;
b:=0;
dep:=0;
father:=0;
end;
readln(m,n,k)
end;
function notappear(newv:tlist):boolean; {判断扩展出的结点是否已在队列中的函数}
var
i:longint;
begin
notappear:=false;
for i:=1 to foot do
if (newv.a=list[i].a) and (newv.b=list[i].b)
then exit;
notappear:=true;
end;
procedure add(newv:tlist); {往队列中加入新结点过程}
begin
if notappear(newv)
then begin
inc(foot);
list[foot]:=newv;
end;
end;
procedure expand(index:longint;var oldv:tlist); {扩展结点过程}
var
i:integer;
newv:tlist;
begin
for i:=1 to 6 do {分别应用6条规则}
begin
if i=1 then
if oldv.a<>0 {把a量筒倒空}
then begin newv.a:=0;newv.b:=oldv.b;end;
if i=2 then
if oldv.a<>m {把a量筒灌满}
then begin newv.a:=m;newv.b:=oldv.b;end;
if i=3 then
if oldv.b<>0 {把b量筒倒空}
then begin newv.b:=0;newv.a:=oldv.a;end;
if i=4 then
if oldv.a<>n {把b量筒灌满}
then begin newv.a:=n;newv.a:=oldv.a;end;
if i=5 then
if (oldv.a<>0) and (oldv.b<>n) {把a量筒往b量筒倒水}
then if oldv.a+oldv.b>=n {判断a往b倒时b能否全部装下}
then begin newv.b:=n;newv.a:=oldv.a-(n-oldv.b);end
else begin newv.a:=0;newv.b:=oldv.a+oldv.b;end;
if i=6 then
if (oldv.a<>m) and (oldv.b<>0) {把b量筒往a量筒倒水}
then if oldv.a+oldv.b>=m {判断b往a倒时a能否全部装下}
then begin newv.a:=m;newv.b:=oldv.b-(m-oldv.a);end
else begin newv.b:=0;newv.a:=oldv.a+oldv.b;end;
newv.father:=index;
newv.dep:=oldv.dep+1;
add(newv);
end;
end;
procedure print(index:longint); {递归打印路径}
var
i,j:byte;
begin
if index=0 then exit;
print(list[index].father);
writeln(list[index].a,' ',list[index].b);
end;
begin{main}
init;
repeat
inc(head);
if list[head].a=k {比较是否跟目标相同,相同则找到,否则扩展新结点}
then begin
found:=true;
best:=list[head].dep;
answer:=head;
break;
end;
if list[foot].dep>100
then begin
writeln('OverTime!');
break;
end;
expand(head,list[head]);
{writeln(list[head].a,' ',list[head].b);}
until (head>=foot) or (foot>max) or found;
if found
then begin
writeln(best);
print(answer);
end
else writeln('No Answer');
close(input);
close(output);
end.
//delphi/7190