#include <stdio.h>
#include <algorithm>
using namespace std;
int cas,tim,n,x,y,a[60],b[60],f[210];
 int main() {
scanf("%d",&cas);
 for(int tim=0;tim<cas;) {
scanf("%d%d%d",&n,&x,&y);
for(int i=1;i<=n;i++)//下标重1开始
scanf("%d%d",&a[i],&b[i]);
int l=0,r=a[1]*x+b[1]*y,m;
 while(l<=r) {
m=(l+r)>>1;
for(int i=1;i<=x;i++)f[i]=-999999999;
f[0]=0;
for(int i=1;i<=n;i++)
 for(int v=x;v>=0;v--) {
f[v]+=m/b[i];//新入工人要更新
for(int j=0;j<v;j++) if (m>=(v-j)*a[i])
f[v]=max(f[v],f[j]+(m-a[i]*(v-j))/b[i]);
}
if(f[x]>=y)r=m-1;//最左逼近
else l=m+1;
}
printf("Case %d: %d\n",++tim,l);
}
return 0;
}

|