#include using namespace std; int a [2005][1005]; int b [22][2005]; struct x{ int ind; int st; int ss; int res; }; void dali(x &q, x &c){ if (q.res > c.res){ c.ind = q.ind; c.st = q.st; c.ss = q.ss; c.res = q.res; } } int ans [1005]; int main () { ifstream fin ("equations.in"); ofstream fout ("equations.out"); int n, m; fin >> m >> n; for (int i = 0; i < m; i ++){ for (int j = 0; j < n + 2; j ++){ fin >> a [i] [j]; } } int s; fin >> s; for (int i = 0; i < s; i ++){ for (int j = 0; j < m; j ++){ fin >> b [i] [j]; } } x c; c.res = -1; x q; for (int i = 0; i < s; i ++){ for (int j = 0; j < m; j ++){ if (b [i][j] == 0){ q.ind = 0; q.st = 0; q.ss = i; q.res = a [j][n] + a [j][n + 1]; dali (q, c); continue; } for (int p = 0; p < n; p ++){ if (a [j][p] == 0) continue; int k = b [i][j] / a [j][p]; int ost = b [i][j] % a [j][p]; if (a [j][p] - ost < ost){ ost = a [j][p] - ost; k ++; } if (k > 1000000) continue; q.ind = p; q.st = k; q.ss = i; if (ost == 0) q.res = a [j][n] + a [j][n + 1]; else q.res = a [j][n + 1] / (ost + 1); dali (q, c); } } } ans [c.ind] = c.st; fout << c.ss + 1 << endl << ans [0]; for (int i = 1; i < n; i ++){ fout << ' ' << ans [i]; } fout << endl; return 0; }