#include <bits/stdc++.h>
using namespace std;
using un = long long;
using vuc = vector<un>;
using vol = vector<bool>;
using puc = pair<un, un>;
#define REP(i, a, b) for (un i = (un)a; i < (un)b; i++)
#define FEAC(i, a) for (auto&& i : a)
#define vec vector
#define ALL(x) (x).begin(), (x).end()
constexpr un mINF = INT64_MIN;
int main(){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    un M, L; cin >> M >> L;
    vuc A(2*M+1); FEAC(a, A) cin >> a;
    un MAX = 600000;
    // un MAX = 10;
    if ((L > MAX) or (L < -MAX)) return 0;
    vuc DP(2*MAX+1, mINF);
    DP[MAX+0] = 0;
    vuc newDP;
    REP(v, -M, M+1){
        if (A[M+v] == 0) continue;
        newDP = DP;
        REP(i, 0, DP.size()){
            REP(x, 1, A[M+v]+1){
                if ((i + x*v) >= DP.size()) break;
                if ((i + x*v) < 0) break;
                newDP[i + x*v] = max(newDP[i + x*v], DP[i]+x);
            }
        }
        DP = move(newDP);
    }
    if (DP[MAX+L] < 0) cout << "impossible\n";
    else cout << DP[MAX+L] << "\n";
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |