1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 int a[10][12],f[12],sum[12],lim=1001;//限制边界次数 题目要求不超过1000
5 int n,m;
6 bool pd()
7 {
8 for(int i=2;i<=m;++i)
9 if(sum[i]==0||sum[i]!=sum[i-1])return false ;
10 return true ;
11 }
12 void dfs(int s)
13 {
14 for(int i=0;i<=f[s];i++)
15 {
16 for(int k=1;k<=m;k++)
17 sum[k]+=a[s][k]*i;//每种颜色的本子的数目;
18 if(s<n) dfs(s+1);
19 else
20 {
21 if(pd()) //每种颜色的本子的数目都一样 sum[1..n]都可以
22 if(sum[1]*m<lim&&sum[1]>0)
23 lim=min(lim,sum[1]*m);
24 }
25 for(int k=1;k<=m;k++)//回溯
26 sum[k]-=a[s][k]*i;
27 }
28 }
29 int main(){
30 scanf("%d%d",&n,&m);
31 for(int i=1;i<=n;i++)//第i行第j列的整数aij表示在第i种类型的本子中包含小寒喜欢的颜色j的纸有aij(1≤aij≤100)张
32 for(int j=1;j<=m;j++)
33 scanf("%d",&a[i][j]);
34 for(int i=1;i<=n;i++)//本子数目
35 scanf("%d",f+i);
36 dfs(1); //从第一本开始搜
37 if(lim<=1000) printf("%d\n",lim);
38 else printf("alternative!\n");
39 return 0;
40 }