1 #include<cstring>
2 #include<cstdio>
3 #include<cstdlib>
4 using namespace std;
5
6 #define inf (1<<25)
7 #define maxn 1010
8 int price[8] = {0,100,50,20,10,5,1};
9 int all,x[5],have[5][8],aim[5],f[8][maxn][maxn];
10
11 inline int ord(int a) { if (a+1 <= 3) return a+1; return 1; }
12
13 inline void updata(int &now,int key) { if (now > key) now = key; }
14
15 inline void dp()
16 {
17 int i,x,y,s[4];
18 for (i = 0;i < 6;++i)
19 for (s[1] = 0;s[1] <= all;++s[1])
20 for (s[2] = all - s[1];s[2] >= 0;--s[2])
21 {
22 if (f[i][s[1]][s[2]] > inf) continue;
23 s[3] = all - s[1] - s[2];
24 for (x = 0;x <= have[1][i+1];++x)
25 {
26 if (x * price[i+1] > s[1]) break;
27 for (y = 0;y <= have[2][i+1];++y)
28 {
29 if (y * price[i+1] > s[2]) break;
30 updata(f[i+1][s[1]-x*price[i+1]][s[2]-y*price[i+1]],f[i][s[1]][s[2]]+x+y);
31 }
32 }
33 for (x = 0;x <= have[1][i+1];++x)
34 {
35 if (x * price[i+1] > s[1]) break;
36 for (y = 0;y <= have[3][i+1];++y)
37 {
38 if (y * price[i+1] > s[3]) break;
39 updata(f[i+1][s[1]-x*price[i+1]][s[2]+(x+y)*price[i+1]],f[i][s[1]][s[2]]+x+y);
40 }
41 }
42 for (x = 0;x <= have[2][i+1];++x)
43 {
44 if (x * price[i+1] > s[2]) break;
45 for (y = 0;y <= have[3][i+1];++y)
46 {
47 if (y * price[i+1] > s[3]) break;
48 updata(f[i+1][s[1]+(x+y)*price[i+1]][s[2]-x*price[i+1]],f[i][s[1]][s[2]]+x+y);
49 }
50 }
51 for (x = 0;x <= have[1][i+1];++x)
52 {
53 if (x * price[i+1] > s[1]) break;
54 for (y = 0;y <= x;++y)
55 updata(f[i+1][s[1]-x*price[i+1]][s[2]+y*price[i+1]],f[i][s[1]][s[2]]+x);
56 }
57 for (x = 0;x <= have[2][i+1];++x)
58 {
59 if (x * price[i+1] > s[2]) break;
60 for (y = 0;y <= x;++y)
61 updata(f[i+1][s[1]+y*price[i+1]][s[2]-x*price[i+1]],f[i][s[1]][s[2]]+x);
62 }
63 for (x = 0;x <= have[3][i+1];++x)
64 {
65 if (x * price[i+1] > s[3]) break;
66 for (y = 0;y <= x;++y)
67 updata(f[i+1][s[1]+y*price[i+1]][s[2]+(x-y)*price[i+1]],f[i][s[1]][s[2]]+x);
68 }
69 }
70 }
71
72 int main()
73 {
74 memset(f,0x7,sizeof(f)); int i,j;
75 for (i = 1;i <= 3;++i) scanf("%d",x+i);
76 for (i = 1;i <= 3;++i)
77 for (j = 1;j <= 6;++j) scanf("%d",have[i]+j),aim[i] += price[j]*have[i][j];
78 all = aim[1] + aim[2] + aim[3];
79 f[0][aim[1]][aim[2]] = 0;
80 for (i = 1;i <= 3;++i) aim[i] -= x[i],aim[ord(i)] += x[i];
81 for (i = 1;i <= 3;++i) if (aim[i] < 0) printf("impossible"),exit(0);
82 dp();
83 if (f[6][aim[1]][aim[2]] < inf) printf("%d",f[6][aim[1]][aim[2]]);
84 else printf("impossible");
85 return 0;
86 }