// Words are flowing out like endless rain into a paper cup
// They slither while they pass they slip away across the universe
// Pools of sorrow, waves of joy are drifting through my open mind
// Possessing and caressing me

#include <bits/stdc++.h>
using namespace std;

using i64 = long long;

namespace _buff {

const size_t BUFF = 1 << 19;
char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
char getc() {
    if (ib == ie) {
        ib = ibuf;
        ie = ibuf + fread(ibuf, 1, BUFF, stdin);
    }
    return ib == ie ? -1 : *ib++;
}

}

i64 read() {
    using namespace _buff;
    i64 ret = 0;
    bool pos = true;
    char c = getc();
    for (; (c < '0' || c > '9') && c != '-'; c = getc()) {
        assert(~c);
    }
    if (c == '-') {
        pos = false;
        c = getc();
    }
    for (; c >= '0' && c <= '9'; c = getc()) {
        ret = (ret << 3) + (ret << 1) + (c ^ 48);
    }
    return pos ? ret : -ret;
}

int main() {
    int n = read(), m = read();

    vector<int> a(n), b(m);
    vector<vector<int>> c(n, vector<int>(m));
    function<void(vector<int>&)> read_vc = [](vector<int> &vc) {
        generate(begin(vc), end(vc), read);
    };
    read_vc(a); read_vc(b);
    for (auto &cc : c) read_vc(cc);

    vector<int> pre(m);
    int tot = 1;
    for (int i = 0; i < m; ++i) {
        pre[i] = tot;
        tot *= b[i] + 1;
    }
    function<void(int&, int)> chkmin = [](int &dp, int val) {
        if (val < dp) dp = val;
    };
    vector<int> f(tot, 1E9);
    f[tot - 1] = 0;
    for (int i = 0; i < n; ++i) {
        vector<vector<int>> g(a[i] + 1, vector<int>(tot, 1E9));
        g[a[i]] = f;
        for (int j = 0; j < m; ++j) {
            for (int r = 0; r <= a[i]; ++r) {
                for (int st = 0; st < tot; ++st) {
                    int cur = min(r, st / pre[j] % (b[j] + 1));
                    for (int t = 1; t <= cur; ++t) {
                        chkmin(g[r - t][st - t * pre[j]], g[r][st] + c[i][j]);
                    }
                }
            }
        }
        f = g[0];
    }
    int ans = *min_element(begin(f), end(f));
    if (ans >= (int) 1E9) {
        ans = -1;
    }
    cout << ans << '\n';
    return 0;
}