#include <stdio.h>
#include <string.h>

#define N	6
#define M	6
#define B	(5 * 5 * 5 * 5 * 5 * 5)
#define INF	0x3f3f3f3f

int min(int a, int b) { return a < b ? a : b; }

int sum_[B], kk[B][M], p5[M + 1];

void init() {
	int b, j;

	p5[0] = 1;
	for (j = 1; j <= M; j++)
		p5[j] = p5[j - 1] * 5;
	for (b = 0; b < B; b++)
		for (j = 0; j < M; j++)
			sum_[b] += kk[b][j] = b / p5[j] % 5;
}

int main() {
	static int aa[N], bb[M], cc[N][M], dp[B];
	int n, m, i, j, k, l, b, sum, ans;

	init();
	scanf("%d%d", &n, &m);
	sum = 0;
	for (i = 0; i < n; i++) {
		scanf("%d", &aa[i]);
		sum += aa[i];
	}
	for (j = 0; j < m; j++) {
		scanf("%d", &bb[j]);
		sum -= bb[j];
	}
	if (sum > 0) {
		printf("-1\n");
		return 0;
	}
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			scanf("%d", &cc[i][j]);
	b = 0, sum = 0;
	for (j = m - 1; j >= 0; j--)
		b = b * 5 + bb[j], sum += bb[j];
	memset(dp, 0x3f, B * sizeof *dp), dp[b] = 0;
	for (i = 0; i < 6; i++) {
		for (j = 0; j < 6; j++)
			for (b = 0; b < B; b++) {
				int x = dp[b];

				if (x == INF)
					continue;
				k = kk[b][j];
				for (l = 1; l <= k; l++)
					dp[b - l * p5[j]] = min(dp[b - l * p5[j]], x + cc[i][j]);
			}
		sum -= aa[i];
		for (b = 0; b < B; b++)
			if (sum_[b] != sum)
				dp[b] = INF;
	}
	ans = INF;
	for (b = 0; b < B; b++)
		ans = min(ans, dp[b]);
	printf("%d\n", ans);
	return 0;
}
