#include <bits/stdc++.h>
using namespace std;
struct si {
  long long x, s;
};
long long t[2][6] = {0}, k[200] = {0}, p[6][7] = {0}, sp = 0;
vector<si> s;
bool cmp(si a, si b) { return a.x < b.x; }
int main() {
  long long n, q, p, x, y, a, m;
  si S;
  cin >> n;
  m = n;
  for (int i = 0; i < 5; i++) {
    cin >> t[0][i];
    if (t[0][i] != -1) k[i]++;
  }
  for (int i = 0; i < 5; i++) {
    cin >> t[1][i];
    if (t[1][i] != -1) k[i]++;
  }
  while (n > 2) {
    n--;
    for (int i = 0; i < 5; i++) {
      cin >> x;
      if (x != -1) k[i]++;
    }
  }
  n = m;
  for (int i = 0; i < 5; i++)
    if (t[0][i] != -1 || t[1][i] != -1) {
      if (t[0][i] == -1) {
        if (k[i] * 2 > n) {
          S.x = 2 * k[i] - n;
          S.s = -(500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 4 > n) {
          S.x = 4 * k[i] - n;
          S.s = -(500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 8 > n) {
          S.x = 8 * k[i] - n;
          S.s = -(500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 16 > n) {
          S.x = 16 * k[i] - n;
          S.s = -(500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 32 > n) {
          S.x = 32 * k[i] - n;
          S.s = -(500 - 2 * t[1][i]);
          s.push_back(S);
        }
        sp -= (500 - 2 * t[1][i]);
        if (k[i] * 2 <= n) {
          sp -= (500 - 2 * t[1][i]);
        }
        if (k[i] * 4 <= n) {
          sp -= (500 - 2 * t[1][i]);
        }
        if (k[i] * 8 <= n) {
          sp -= (500 - 2 * t[1][i]);
        }
        if (k[i] * 16 <= n) {
          sp -= (500 - 2 * t[1][i]);
        }
        if (k[i] * 32 <= n) {
          sp -= (500 - 2 * t[1][i]);
        }
      } else if (t[1][i] == -1) {
        if (k[i] * 2 > n) {
          S.x = 2 * k[i] - n;
          S.s = (500 - 2 * t[0][i]);
          s.push_back(S);
        }
        if (k[i] * 4 > n) {
          S.x = 4 * k[i] - n;
          S.s = (500 - 2 * t[0][i]);
          s.push_back(S);
        }
        if (k[i] * 8 > n) {
          S.x = 8 * k[i] - n;
          S.s = (500 - 2 * t[0][i]);
          s.push_back(S);
        }
        if (k[i] * 16 > n) {
          S.x = 16 * k[i] - n;
          S.s = (500 - 2 * t[0][i]);
          s.push_back(S);
        }
        if (k[i] * 32 > n) {
          S.x = 32 * k[i] - n;
          S.s = (500 - 2 * t[0][i]);
          s.push_back(S);
        }
        sp += (500 - 2 * t[0][i]);
        if (k[i] * 2 <= n) {
          sp += (500 - 2 * t[0][i]);
        }
        if (k[i] * 4 <= n) {
          sp += (500 - 2 * t[0][i]);
        }
        if (k[i] * 8 <= n) {
          sp += (500 - 2 * t[0][i]);
        }
        if (k[i] * 16 <= n) {
          sp += (500 - 2 * t[0][i]);
        }
        if (k[i] * 32 <= n) {
          sp += (500 - 2 * t[0][i]);
        }
      } else if (t[0][i] <= t[1][i]) {
        if (k[i] * 2 > n) {
          S.x = 2 * k[i] - n;
          S.s = (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 4 > n) {
          S.x = 4 * k[i] - n;
          S.s = (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 8 > n) {
          S.x = 8 * k[i] - n;
          S.s = (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 16 > n) {
          S.x = 16 * k[i] - n;
          S.s = (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 32 > n) {
          S.x = 32 * k[i] - n;
          S.s = (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        if (k[i] * 2 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 4 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 8 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 16 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 32 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
      } else {
        if (k[i] * 2 > n) {
        }
        if (2 * k[i] <= n) {
          S.x = (n - 2 * k[i] + 2) / 2;
          S.s = -((500 - 2 * t[0][i]) - (500 - 2 * t[1][i]));
          s.push_back(S);
        }
        if (4 * k[i] <= n) {
          S.x = (n - 4 * k[i] + 4) / 4;
          S.s = -(500 - 2 * t[0][i]) + (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 8 <= n) {
          S.x = (n - 8 * k[i] + 8) / 8;
          S.s = -(500 - 2 * t[0][i]) + (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        if (k[i] * 16 <= n) {
          S.x = (n - 16 * k[i] + 16) / 16;
          S.s = -(500 - 2 * t[0][i]) + (500 - 2 * t[1][i]);
          s.push_back(S);
        }
        sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        if (k[i] * 2 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 4 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 8 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 16 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
        if (k[i] * 32 <= n) {
          sp += (500 - 2 * t[0][i]) - (500 - 2 * t[1][i]);
        }
      }
    }
  sort(s.begin(), s.end(), cmp);
  int i = 0;
  while (sp <= 0 && i < s.size()) {
    sp = sp + s[i].s;
    i++;
    while (i < s.size() && (i == 0 || s[i - 1].x == s[i].x)) {
      sp = sp + s[i].s;
      i++;
    }
  }
  if (sp <= 0) {
    cout << -1;
    return 0;
  }
  if (i == 0)
    cout << 0;
  else
    cout << s[i - 1].x;
  return 0;
}
