Pagini recente » Cod sursa (job #2810156) | Cod sursa (job #3149059) | Cod sursa (job #561246) | Cod sursa (job #455895) | Cod sursa (job #1382643)
#include <cstdio>
#include <algorithm>
using namespace std;
int N,C,a[35],b[35],ind[35],def,used[35];
long long L;
bool cmp(int i,int j)
{
return a[i]<a[j];
}
long long pow(int C,int i)
{
unsigned long long sol=1,a=C;
while (i)
{
if (i&1) sol*=a;
a*=a;
i>>=1;
if (sol>1e16)
{
sol/=C;
break;
}
}
return sol;
}
int getDef()
{
int i;
for (i=1;pow(C,i)<=L;i++);
int def=i-1;
return def;
}
int min(int x,long long y)
{
if (x<y) return x;
else return y;
}
int main()
{
freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
scanf("%d %d %lld",&N,&C,&L);
for (int i=1;i<=N;i++) scanf("%d %d",&a[i],&b[i]),ind[i]=i;
sort(ind+1,ind+N+1,cmp);
long long cnt=0;
for (int i=N;i>0;i--)
{
long long x=pow(C,a[ind[i]]);
if (b[ind[i]]>0 && a[ind[i]]<getDef())
used[ind[i]]=min(b[ind[i]],L/x),cnt+=used[ind[i]],L-=used[ind[i]]*x;
}
printf("%lld\n",cnt);
for (int i=1;i<=N;i++) printf("%d ",used[i]);
return 0;
}