#include<iostream>
#include<string.h>
using namespace std;
int n, q, sq = 0, lq = 0, nd[110][110], nl[110][110], nt[110][110];
bool check(int x)
{
memset(nt, 0, sizeof nt);
int t1 = x % n, t2 = x / n, t3, t = sq;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n; j ++){
t3 = t2 + (int)(t1 >= i);
if(t3 > (nd[i][j] - nt[i][j] - nl[i][j])) t3 = nd[i][j] - nt[i][j] - nl[i][j];
t -= t3 * 2;
nt[i][j] = nt[j][i] += t3;
}
if(t <= q) return true;
}
return false;
}
int main()
{
scanf("%d%lld", &n, &q);
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++){
scanf("%d", &nd[i][j]);
sq += nd[i][j];
}
if(sq <= q){
printf("0");
return 0;
}
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++){
scanf("%d", &nl[i][j]);
lq += nl[i][j];
}
if(lq > q){
printf("-1");
return 0;
}
int l = -1, r = sq + 1;
while ((l + 1) < r){
int mid = (l + r) / 2;
if(check(mid)) r = mid;
else l = mid;
}
if(r == (sq + 1)) printf("-1");
else printf("%d", r);
return 0;
}