#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 1000
int n,c,l,car[N],k,s;
char sl[N];
struct vec{
int x,y,poz;
}v[N];
void read()
{
int i;
scanf("%d%d%d",&n,&c,&l);
for(i=0;i<n;i++)
{
scanf("%d%d",&v[i].x,&v[i].y);
v[i].poz=i;
}
}
void creare(char s[N],int v[N])
{
int n,i,k=0;
n=strlen(s);
k=0;
v[k++]=n;
for(i=0;i<n;i++)
v[k++]=s[i]-'0';
}
void afis(int v[N])
{
int i;
if(v[v[0]]==0)
printf("%d",0);
else
for(i=v[0];i>=1;i--)
printf("%d",v[i]);
printf("\n");
}
void suma(int v1[N],int v2[N],int sum[N])
{
int i,t=0,k=1;
for(i=1;i<=v1[0]&&i<=v2[0];i++)
{
sum[k++]=(v1[i]+v2[i]+t)%10;
t=(v1[i]+v2[i]+t)/10;
}
while(i<=v1[0])
{
sum[k++]=(v1[i]+t)%10;
t=(v1[i]+t)/10;
i++;
}
while(i<=v2[0])
{
sum[k++]=(v2[i]+t)%10;
t=(v2[i]+t)/10;
i++;
}
if(t)
sum[k++]=t;
sum[0]=k-1;
}
void scad(int v1[N],int v2[N],int dif[N])
{
int i,k=1,j;
//inters(v1,v2);
for(i=1;i<=v1[0]&&i<=v2[0];i++)
if(v1[i]-v2[i]>=0)
{
dif[k++]=v1[i]-v2[i];
if(v1[i]-v2[i]==0&&i==v1[0])
{
// v1[0]--;
//k--;
}
}
else
{
dif[k++]=v1[i]+10-v2[i];
for(j=i+1;v1[j]==0&&j<=v1[0];j++)
v1[j]=9;
v1[j]--;
if(v1[j]==0&&j==v1[0])
v1[0]--;
}
while(i<=v1[0])
{
dif[k++]=v1[i];
i++;
}
dif[0]=k-1;
}
int maxim(const void *a,const void *b)
{
vec *aa,*bb;
aa=(vec*)a;
bb=(vec*)b;
return aa->x-bb->x;
}
void solve()
{
int i,dif[N];
//creare(sl,l);
qsort(v,n,sizeof(v[0]),maxim);
/*for(i=n-1;i>=0;i--)
scad(l,)*/
for(i=n-1;i>=0&&l>0;i--)
if(l/pow(c,v[i].x)<v[i].y)
{
car[v[i].poz]=l/(int)pow(c,v[i].x);
l-=l/(int)pow(c,v[i].x)*(int)pow(c,v[i].x);
s+=car[v[i].poz];
}
else
{
l-=v[i].y*(int)pow(c,v[i].x);
car[v[i].poz]=v[i].y;
s+=car[v[i].poz];
}
printf("%d\n",s);
for(i=0;i<n-1;i++)
printf("%d ",car[i]);
printf("%d\n",car[i]);
}
int main()
{
freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
read();
solve();
return 0;
}