| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1297046 | exoworldgd | Kitchen (BOI19_kitchen) | C++20 | 0 ms | 0 KiB |
#pragma GCC optimize("O5,unroll-loops,inline,fast-math")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include<bits/stdc++.h>
#define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0)
#define int long long
using namespace std;
const int N=305,M=305,K=305,MX=90005;
int n,m,k,a[N],b[M],sum=0,mn=MX;
bitset<MX> dp[K];
signed main(void) {
exoworldgd;
cin >> n >> m >> k;
for (int i = 0; i < n; i++){
cin >> a[i];
if (a[i]<k) return cout<<"Impossible",0;
sum += a[i];
}
for (int i =0; i< m; i++) cin >> b[i];
sort(b,b+m), dp[0][0]=1;
for (int i=0; i<m; i++) for (int j = min(m,k); j >= 1; j--) dp[j]|=(dp[j-1]<<b[i]);
for (int i=k; i <=m; i++){
for (int j =sum; j <MX; j++){
if (!dp[min(i,k)][j]) continue;
if (j >=sum){
int cap=0;
for (int l=m-1; l>= m-i &&l >=0; l--) cap+=b[l];
if (cap >= j)mn = min(mn,cap-sum);
}
}
}
cout << (mn==MX ? "Impossible":to_string(mn));
}
