#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>#include <stack>#include <queue>#include <vector>#include <map>#include <string>using namespace std;struct job{ int st,en,cpu,mem,v,w,x; bool operator<(const job t)const { return st<t.st||(st==t.st&&v>t.v); } void get() { scanf("%d%d%d%d%d%d%d",&cpu,&mem,&st,&en,&v,&w,&x); }} jb[10009];bool visit[10009];int cpu[100009],mem[10009],val[10009];int F,M,C,L;int main(){ int T = 1; while(~scanf("%d",&F)&&F) { scanf("%d%d%d",&C,&M,&L); for(int i=0;i<L;i++) jb[i].get(); memset(visit,0,sizeof(visit)); memset(cpu,0,sizeof(cpu)); memset(mem,0,sizeof(mem)); memset(val,0,sizeof(val)); sort(jb,jb+L); int ans = 0 ; for(int i=0;i<F;i++) { C+=cpu[i];M+=mem[i]; cpu[i] = mem[i] = 0; int ch = -1; for(int j=0;j<L&&jb[j].st<=i;j++) { if(jb[j].cpu<=C&&jb[j].mem<=M&&!visit[j]) { ch = j; break; } } if(ch!=-1) { visit[ch] = 1; C-=jb[ch].cpu; M-=jb[ch].mem; mem[1+i]+=jb[ch].mem; cpu[1+i]+=jb[ch].cpu; int tmp= 0 ; if(1+i<jb[ch].en) tmp = (jb[ch].en-1-i)*jb[ch].w; else tmp = (jb[ch].en-1-i)*jb[ch].x; val[1+i]+=jb[ch].v+tmp; i--; } } for(int i=0;i<=F;i++) ans+=val[i] ; for(int i=0;i<L;i++) if(!visit[i]&&jb[i].en<F) ans-= (F-jb[i].en)*jb[i].x; printf("Case %d: %dnn",T++,ans); } return 0;}