type rec=record
v:int64;
p,nr,fol:longint;
end;
var min,l:int64;
i,j,n,c:longint;
a:array[1..30] of rec;
f,g:text;
procedure poz(var m:longint; vi,vf:longint);
var i,j,mi,mj,aux2:longint;
aux:rec;
begin
i:=vi;
j:=vf;
mi:=0;
mj:=-1;
while i<j do begin
if a[i].v<a[j].v then begin
aux:=a[i];
a[i]:=a[j];
a[j]:=aux;
aux2:=mi;
mi:=-mj;
mj:=-aux2;
end;
inc(i,mi);
inc(j,mj);
end;
m:=i;
end;
procedure quick(vi,vf:longint);
var m:longint;
begin
if vi<vf then begin
poz(m,vi,vf);
quick(vi,m-1);
quick(m+1,vf);
end;
end;
procedure poz2(var m:longint; vi,vf:longint);
var i,j,mi,mj,aux2:longint;
aux:rec;
begin
i:=vi;
j:=vf;
mi:=0;
mj:=-1;
while i<j do begin
if a[i].p<a[j].p then begin
aux:=a[i];
a[i]:=a[j];
a[j]:=aux;
aux2:=mi;
mi:=-mj;
mj:=-aux2;
end;
inc(i,mi);
inc(j,mj);
end;
m:=i;
end;
procedure quick2(vi,vf:longint);
var m:longint;
begin
if vi<vf then begin
poz2(m,vi,vf);
quick(vi,m-1);
quick(m+1,vf);
end;
end;
begin
assign(f,'shop.in');
assign(g,'shop.out');
reset(f);
rewrite(g);
read(f,n,c,l);
for i:=1 to n do begin
read(f,a[i].v,a[i].nr);
a[i].v:=trunc(exp(a[i].v*ln(c)));
a[i].p:=i;
end;
quick(1,n);
i:=1;
while a[i].v*a[i].nr <l do begin
a[i].fol:=a[i].nr;
l:=l-a[i].v*a[i].nr;
min:=min+a[i].nr;
inc(i);
end;
j:=a[i].nr;
while a[i].v*i>l do
dec(j);
a[i].fol:=j;
inc(min,j);
writeln(g,min);
quick2(1,n);
for i:=1 to n do write(g,a[i].fol,' ');
close(f);
close(g);
end.