#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ll n,m,k,s=0;
cin>>n>>m>>k;
vector<ll> V,L,dp1;
vector<unordered_set<ll>> dp2;
dp1.assign(90000,0);
dp2.resize(90000);
dp1[0]=1;
dp2[0].insert(0);
ll caja1=n*k;
ll caja2=0;
for(ll i=0;i<n;i++){
ll a;
cin>>a;
if(a>=k){
caja2+=a-k;
}else{
cout<<"Impossible";
return 0;
}
L.push_back(a);
}
for(ll i=0;i<m;i++){
ll a;
cin>>a;
V.push_back(a);
}
ll a,b,c;
for(ll i=0;i<m;i++){
for(ll j=90000;j>=0;j--){
if(dp1[j]==1){
b=caja1-j;
if(V[i]>n){
a=n;
c=V[i]-n;
}else{
a=V[i];
c=0;
}
if(a<=b){
dp1[j+a]=1;
for(auto x:dp2[j]){
dp2[j+a].insert(x+c);
}
}else{
dp1[j+b]=1;
c+=a-b;
for(auto x:dp2[j]){
dp2[j+b].insert(x+c);
}
}
}
}
}
ll ans=1000000000;
for(auto x:dp2[n*k]){
if(x<ans && x>=caja2){
ans=x;
}
}
if(ans!=1000000000){
cout<<ans-caja2;
}else{
cout<<"Impossible";
}
}
# | 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... |