#include <stdio.h>
#define in "shop.in"
#define out "shop.out"
#define NMAX 31
#define minim( a, b ) ( (a) < (b) ? (a) : (b) )
int n, C;
long long suma;
long long L;
long long a[NMAX];
int sol[NMAX], nr[NMAX];
long long putere( int a, long long b );
void Read();
void Solve();
void QSort( int, int);
FILE *fout = fopen ( out, "w" );
int main()
{
Read();
Solve();
fclose ( fout );
return 0;
}
void Read()
{
FILE *fin = fopen ( in, "r" );
fscanf( fin, "%d%d%lld", &n, &C, &L );
int i;
for ( i = 1; i <= n; ++i )
{
fscanf( fin, "%lld%d", &a[i], &nr[i] );
}
/*for ( i = 1; i <= n; ++i )
fprintf( fout, "%d ", a[i] );
fprintf( fout, "\n" );*/
fclose( fin );
}
long long putere( int a, long long b )
{
if ( b == 0 ) return 1;
if ( b == 1 ) return a;
if ( (b&1) == 0 ) return putere( a, (b>>1) ) * putere ( a, (b>>1) );
if ( (b&1) == 1 ) return putere ( a, (b>>1) ) * putere ( a, (b>>1) ) * a;
}
void QSort( int st, int dr )
{
long long pivot = a[st];
int i = st - 1, j = dr + 1;
do
{
do { i++; } while ( a[i] < pivot );
do { j--; } while ( a[j] > pivot );
if ( i <= j )
{
long long aux = a[i];
a[i] = a[j];
a[j] = aux;
aux = nr[i];
nr[i] = nr[j];
nr[j] = aux;
}
} while ( i <= j );
if ( i < dr ) QSort( i, dr );
if ( st < j ) QSort( st, j );
}
void Solve()
{
int i, j;
for ( i = 1; i <= n; ++i )
{
a[i] = putere( C, a[i] );
}
QSort( 1, n );
/*for ( i = 1; i <= n; ++i )
fprintf( fout, "%d ", a[i] );
fprintf( fout, "\n" );
for ( i = n; i >=1; --i )
fprintf( fout, "%d ", nr[i] );
fprintf( fout, "\n\n" );
*/
long long LL = L;
int count;
for ( i = n; i >= 1; --i )
{
count = 0;
//fprintf( fout, "%lld ", L );
//count = minim( L/a[i], nr[i] );
/*if ( L/a[i] < nr[i] ) count = L/a[i];
else count = nr[i];*/
count = minim( L/a[i], nr[i] );
//fprintf( fout, "rap:%lld numar:%d\n", nr[i], L/a[i] );
sol[i] = count;
suma += sol[i];
L -= a[i] * count;
}
fprintf( fout, "%lld\n", suma );
for ( i = 1; i <= n; ++i )
fprintf( fout, "%d ", sol[i] );
}