#include<stdio.h> #include<stdlib.h> struct p { int w; int z[6]; struct p *next; }; int n,m,zb[6],add[201],yx[201][6]; int dp() { p *list,*base,*temp,*t,*t2; int i,j,a; list=(p *)malloc(sizeof(p)); list->w=0; for(i=1;i<=m;i++) list->z[i]=0; list->next=NULL; for(i=1;i<=n;i++) { a=1; for(j=1;j<=m;j++) if(yx[i][j]>zb[j]) { a=0; break; } if(!a) continue; base=(p *)malloc(sizeof(p)); base->w=add[i]; for(j=1;j<=m;j++) base->z[j]=yx[i][j]; base->next=NULL; t=list; while(t!=NULL) { a=1; for(j=1;j<=m;j++) if(t->z[j]+yx[i][j]>zb[j]) { a=0; break; } if(a) { temp=(p *)malloc(sizeof(p)); temp->w=t->w+add[i]; for(j=1;j<=m;j++) temp->z[j]=t->z[j]+yx[i][j]; temp->next=base; base=temp; } t2=t; t=t->next; } t2->next=base; } t=list; j=0; while(t!=NULL) { if(t->w>j) j=t->w; t=t->next; } return j; } int main() { int i,j; scanf("%d %d\n",&n,&m); for(i=1;i<=m;i++) scanf("%d ",&zb[i]); scanf("\n"); for(i=1;i<=n;i++) { scanf("%d ",&add[i]); for(j=1;j<=m;j++) scanf("%d ",&yx[i][j]); scanf("\n"); } i=dp(); printf("%d\n",i); }