#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,a[10],b[10],c[10][10],len,sum[10][1<<10],sk[10],ac[1<<10];
ll ans=1e9;
bool check(){
	for(int i=0;i<len;++i){
		int tp=ac[i];
		for(int j=0;j<n;++j)if((sk[j]&i)==sk[j])tp+=a[j];
		if(tp>0)return 0;
	}return 1;
}
void dfs(int x,ll w){
	if(w>=ans)return;
	if(x>=n){
		if(check())ans=w;
		return;
	}ll tp=w;
	for(int i=x;i<n;++i)sk[i]=len-1,tp+=sum[i][sk[i]];
	if(!check())return;
	ans=min(ans,tp);
	for(int i=0;i<len;++i){
		sk[x]=i;
		dfs(x+1,w+sum[x][i]);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;++i)scanf("%d",&a[i]);
	for(int i=0;i<m;++i)scanf("%d",&b[i]);
	len=1<<m;
	for(int i=0;i<len;++i)
		for(int j=0;j<m;++j)if((1<<j)&i)ac[i]=(ac[i]-b[j]);
	for(int i=0;i<n;++i)
		for(int j=0;j<m;++j)scanf("%d",&c[i][j]);
	for(int i=0;i<n;++i)
		for(int j=0;j<len;++j)
			for(int k=0;k<m;++k)if((1<<k)&j)sum[i][j]=(sum[i][j]+c[i][k]);
	for(int i=0;i<n;++i)sk[i]=len-1;
	if(!check()){
		puts("-1");
		return 0;
	}
	for(int i=1;i<=100000;++i){
		ll tp=0;
		for(int j=0;j<n;++j)sk[j]=rand()%len,tp+=sum[j][sk[j]];
		if(check())ans=tp;
	}
	dfs(0,0);
	printf("%lld\n",ans);
}