#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
signed main() {
int n, k;
cin >> n >> k;
int r[n][k];
int u[n][k];
int p[k] = {0};
vector <vector <pair <int, int>>> v(k);
int cnt[n] = {0};
for (int i = 0;i < n;i++) {
for (int j = 0;j < k;j++) {
cin >> r[i][j];
v[j].push_back({r[i][j], i});
}
}
for (int i = 0;i < n;i++) {
for (int j = 0;j < k;j++) {
cin >> u[i][j];
}
}
for (int i = 0;i < k;i++) {
sort(v[i].begin(), v[i].end());
}
int is[k] = {0};
int ans = 0;
for (int i = 0;i < k;i++) {
for (int j = 0;j < n;j++) {
if (p[i] >= v[i][j].ff) {
cnt[v[i][j].ss]++;
is[i]++;
if (cnt[v[i][j].ss] == k) {
ans++;
for (int l = 0;l < k;l++) {
p[l] += u[v[i][j].ss][l];
}
cnt[v[i][j].ss]++;
}
}
else {
break;
}
}
}
bool pos = true;
while (pos) {
if (pos == false) break;
pos = false;
for (int i = 0;i < k;i++) {
while (is[i] < n) {
if (p[i] >= v[i][is[i]].ff) {
pos = true;
cnt[v[i][is[i]].ss]++;
if (cnt[v[i][is[i]].ss] == k) {
ans++;
for (int l = 0;l < k;l++) {
p[l] += u[v[i][is[i]].ss][l];
}
cnt[v[i][is[i]].ss]++;
}
is[i]++;
}
else {
break;
}
}
}
}
// for (int i = 0;i < k;i++) {
// for (auto x : v[i]) {
// cout << x.ff << " " << x.ss << endl;
// }
// cout << endl;
// }
// for (int i = 0;i < k;i++) {
// cout << is[i] << " ";
// }
// cout << endl;
// for (int i = 0;i < k;i++) {
// cout << p[i] << " ";
// }
// cout << endl;
cout << ans << '\n';
return 0;
}