// testing overflow WA #include using namespace std; using ll = int; int main() { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); ll N, M, L; cin >> N >> M >> L; vector> s(N); for (auto& v : s) { v.resize(11); for (ll& x : v) cin >> x; } vector cnt(12, 0); vector done(N, false); while (M--) { int h; cin >> h; if (h < 12) { ++cnt[h]; } else { vector pos(N, 0), dir(N), D(N); for (int i = 0; i < N; ++i) { for (ll h = 1; h <= 11; ++h) pos[i] += h*s[i][h-1]*cnt[h]; pos[i] = min(pos[i], L); } for (int i = 0; i < N; ++i) if (pos[i] < L-pos[i]) { dir[i] = -1; D[i] = pos[i]; } else { dir[i] = 1; D[i] = L-pos[i]; } int catch_s = -1, catch_d; for (int i = 0; i < N; ++i) if (L < 4*D[i] && !done[i]) { if (catch_s == -1 || (catch_d == -1 && dir[i] == 1)) { catch_s = i; catch_d = dir[i]; } } vector nsafe; for (int i = 0; i < N; ++i) if (!done[i] && i != catch_s && dir[i] == 1) nsafe.push_back(i); // for (int i = 0; i < N; ++i) cout << D[i] << ' ' << dir[i] << ' '; cout << endl; if (nsafe.size() == 0) cout << "None\n"; else { for (int i : nsafe) { done[i] = true; cout << i+1 << (i==nsafe.back()?'\n':' '); } } if (catch_s == -1) cout << "None\n"; else { done[catch_s] = true; cout << catch_s+1 << '\n'; } cnt.assign(12,0); } } return 0; }