#include
using namespace std;
#define pow2(x) (1«(x))
const int maxn = 103; const int maxm = 19; const int maxs = pow2(16) + 3;
int n, m, e, d[maxn], c[maxn][maxm], f[maxs], g[maxs];
inline void upMin(int& a, const int& b) { if (a > b) a = b; }
int main() { #ifdef LAEKOV_LOCAL freopen(".in", “r”, stdin); #endif
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i) {
scanf("%d", d + i);
for (int j = 0; j < m; ++ j)
scanf("%d", c[i] + j);
}
memset(f, 0x3f, sizeof(f));
f[0] = 0;
e = pow2(m);
for (int i = 1; i <= n; ++ i) {
memset(g, 0x3f, sizeof(int) * e);
for (int j = 0; j < m; ++ j)
for (int k = e - 1; k >= 0; -- k)
if (k & pow2(j)) {
upMin(g[k], g[k ^ pow2(j)] + c[i][j]);
upMin(g[k], f[k ^ pow2(j)] + d[i] + c[i][j]);
}
for (int j = 0; j < e; ++ j)
upMin(g[j], f[j]);
memcpy(f, g, sizeof(int) * e);
}
printf("%d\n", f[e - 1]);
}