#include #include #include #include #include #include #pragma GCC target("avx2") #pragma GCC optimize("O3") using namespace std; void inc(int64_t* a, int64_t* b, int len) { for(int i = 0; i < len; i++) a[i] += b[i]; } int main() { int n, q, len; cin >> n >> q >> len; vector done(n); vector distv(n); array, 11> increment; for(auto& x: increment) x.resize(n); for(int i = 0; i < n; i++) { for(int j = 0; j < 11; j++) { cin >> increment[j][i]; increment[j][i] *= (j+1); } } while(q--) { int x; cin >> x; x--; if(x < 11) { inc(distv.data(), increment[x].data(), n); } else { int rret = 1e9; int lret = 1e9; vector fin; for(int i = 0; i < n; i++) { if(done[i]) continue; int64_t dist = distv[i]; if(dist * 2 >= len) { if(dist >= len) done[i] = true, fin.push_back(i+1); else { int64_t need = len - dist; if(len < 4 * need) { if(i < rret) rret = i; else done[i] = true, fin.push_back(i+1); } else done[i] = true, fin.push_back(i+1); } } else { if(len < 4 * dist) { if(i < lret) lret = i; } } } if(fin.size() == 0) cout << "None\n"; else for(int i = 0; i < fin.size(); i++) cout << fin[i] << " \n"[i == fin.size()-1]; if(lret == 1e9 && rret == 1e9) cout << "None\n"; else if(rret != 1e9) cout << rret + 1 << '\n', done[rret] = true; else cout << lret + 1 << '\n', done[lret] = true; fill(distv.begin(), distv.end(), 0); } } }