#include <bits/stdc++.h>   using namespace std;   const int N = 5555;   int hackable[N];   int sols[N];   int pts[N][13];   int score[N];   int z[N];   int bound[N];   int cnt_hack[N];   int rgt[N];   int task[N][13];   int guys[N];   int main() {     int n;     scanf( %d , &n);     for (int j = 0; j < 3; j++) {       hackable[j] = 0;       sols[j] = 0;     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < 3; j++) {         scanf( %d , task[i] + j);         if (task[i][j] < 0) {           hackable[j]++;         }         if (task[i][j] > 0) {           sols[j]++;         }       }     }     int cost[3];     int ans = n;     for (cost[0] = 500; cost[0] <= 3000; cost[0] += 500) {       for (cost[1] = 500; cost[1] <= 3000; cost[1] += 500) {         for (cost[2] = 500; cost[2] <= 3000; cost[2] += 500) {           bool err = false;           for (int j = 0; j < 3; j++) {             cnt_hack[j] = -1;             for (int u = hackable[j]; u >= 0; u--) {               int k = sols[j] + (hackable[j] - u);               int real_cost = 500;               int coeff = 2;               while (coeff * k <= n && real_cost < 3000) {                 coeff *= 2;                 real_cost += 500;               }               if (real_cost == cost[j]) {                 cnt_hack[j] = u;                 break;               }             }             if (cnt_hack[j] == -1) {               err = true;               break;             }           }           if (err) {             continue;           }           for (int i = 0; i < n; i++) {             score[i] = 0;             for (int j = 0; j < 3; j++) {               int a = abs(task[i][j]);               pts[i][j] = (a > 0 ? (cost[j] * (250 - a) / 250) : 0);               score[i] += pts[i][j];             }           }           score[0] += 100 * (cnt_hack[0] + cnt_hack[1] + cnt_hack[2]);           int cnt = 0;           for (int type = 0; type < 128; type++) {             guys[type] = 0;           }           for (int i = 1; i < n; i++) {             if (score[i] > score[0]) {               int type = 0;               for (int t = 1; t < 8; t++) {                 int dec = 0;                 for (int j = 0; j < 3; j++) {                   if (t & (1 << j)) {                     if (task[i][j] < 0) {                       dec += pts[i][j];                     }                   }                 }                 if (score[i] - dec <= score[0]) {                   type |= (1 << (t - 1));                 }               }               guys[type]++;               cnt++;             }           }           for (int mask = 1; mask < (1 << 7); mask++) {             rgt[mask] = 0;             for (int type = 0; type < 128; type++) {               if (type & mask) {                 rgt[mask] += guys[type];               }             }           }           for (int j = 0; j < 3; j++) {             cnt_hack[j] = min(cnt_hack[j], cnt);           }           for (int AB = 0; AB <= cnt_hack[0]; AB++) {             for (int AC = 0; AB + AC <= cnt_hack[0]; AC++) {               for (int BC = 0; AB + BC <= cnt_hack[1] && AC + BC <= cnt_hack[2];                    BC++) {                 for (int ABC = 0;                      AB + AC + ABC <= cnt_hack[0] &&                      AB + BC + ABC <= cnt_hack[1] && AC + BC + ABC <= cnt_hack[2];                      ABC++) {                   int A = cnt_hack[0] - AB - AC - ABC;                   int B = cnt_hack[1] - AB - BC - ABC;                   int C = cnt_hack[2] - AC - BC - ABC;                   z[1] = 0;                   z[2] = 0;                   z[3] = AB;                   z[4] = 0;                   z[5] = AC;                   z[6] = BC;                   z[7] = ABC;                   bound[0] = 0;                   bound[1] = A;                   bound[2] = B;                   bound[3] = A + B;                   bound[4] = C;                   bound[5] = A + C;                   bound[6] = B + C;                   bound[7] = A + B + C;                   for (int mask = 1; mask < (1 << 7); mask++) {                     int lft = 0;                     for (int t = 1; t < 8; t++) {                       if (mask & (1 << (t - 1))) {                         lft += z[t];                       }                     }                     bound[mask & 7] = min(bound[mask & 7], rgt[mask] - lft);                   }                   if (bound[0] < 0) {                     continue;                   }                   for (int realA = 0; realA <= bound[1]; realA++) {                     int boundB = min(bound[2], bound[3] - realA);                     int boundC = min(bound[4], bound[5] - realA);                     int boundBC = min(bound[6], bound[7] - realA);                     if (boundB >= 0 && boundC >= 0 && boundBC >= 0) {                       int realBplusC = min(boundB + boundC, boundBC);                       ans = min(ans, 1 + (cnt - realA - realBplusC - AB - AC -                                           BC - ABC));                     }                   }                 }               }             }           }         }       }     }     printf( %d n , ans);     return 0;   }   