1 /*
2 http://acm.hdu.edu.cn/showproblem.php?pid=3605
3 状态压缩+最大流
4 每个人对于m个星球有1<<m种选择,把这些选择看成一个点
5 开个数组存这些选择的个数
6 然后构造最大流
7 给出建图代码
8 自己找个高效的最大流去吧
9 */
10
11 int main() {
12
13 int da, i, j, ans, p, ss;
14 while(~scanf("%d %d", &n, &m)) {
15
16 memset(dp, 0, sizeof(dp));
17 p = 1 << m;
18 s = p + m;
19 ans = 0;
20 t = s + 1;
21 N = t + 1;
22 init();
23
24 for(i = 1; i <= n; ++ i) {
25
26 ss = 0;
27 for(j = 1; j <= m; ++ j) {
28
29 scanf("%d", &da);
30 ss = (ss << 1) + da;
31 }
32 dp[ ss ] ++;
33 }
34
35 for(i = 0; i < p; ++ i) {
36
37 add(s, i, dp[ i ]);
38 add(i, s, 0);
39 }
40
41 for(i = 0; i < p; ++ i) {
42
43 int z = i;
44 int cnt = 0;
45 while(z) {
46
47 if(z & 1) {
48
49 add(i, cnt+p, dp[ i ]);
50 add(cnt+p, i, 0);
51 }
52 z = z >> 1;
53 cnt ++;
54 }
55 }
56
57 for(j = 0; j < m; ++ j) {
58
59 scanf("%d", &da);
60
61 add(p+j, t, da);
62 add(t, p+j, 0);
63 }
64
65 sap(ans);
66 if(ans == n) puts("YES");
67 else puts("NO");
68 }
69 return 0;
70 }
71