#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int a[30];
int b[30];
int dp[31][1<<16];
int main() {
	int n,c;
	while(scanf("%d %d",&n,&c),n) {
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(dp,-1,sizeof(dp));
		for(int i=0;i<n;i++) {
			for(int j=0;j<16;j++) {
				int x;
				scanf("%d",&x);
				if(x) a[i]|=(1<<j);
			}
		}
		for(int i=0;i<c;i++) {
			for(int j=0;j<16;j++) {
				int x;
				scanf("%d",&x);
				if(x) b[i]|=(1<<j);
			}
		}
		dp[0][0]=0;
		for(int i=0;i<n;i++) {
			for(int bit=0;bit<(1<<16);bit++) {
				if(dp[i][bit]==-1) continue;
				int Bit=bit|a[i];
				dp[i+1][Bit]=max(dp[i+1][Bit],dp[i][bit]);
				for(int j=0;j<c;j++) {
					int poyo=Bit&b[j];
					int cnt=0;
					for(int k=0;k<16;k++) if(poyo&(1<<k)) cnt++;
					dp[i+1][Bit&(~b[j])]=max(dp[i+1][Bit&(~b[j])],dp[i][bit]+cnt);
				}
			}
		}
		int ans=0;
		for(int bit=0;bit<(1<<16);bit++) {
			ans=max(ans,dp[n][bit]);
		}
		printf("%d\n",ans);
	}
}