#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> pii;
#define fi first
#define se second
#define debug(x) cerr<<#x<<" is "<<x<<endl;
int dp[100005];
signed main(){
int n,m,k;cin>>n>>m>>k;
int a[n],b[m];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<m;i++){
cin>>b[i];
}
int ans=LLONG_MAX;
for(int bm=0;bm<(1<<m);bm++){
bool f=1;
int tk[n];
memset(tk,0,sizeof(tk));
int ta[n];
memset(ta,0,sizeof(ta));
int e=0;
int cd=0;
for(int i=0;i<m;i++){
if((1<<i)&bm){
int c=b[i];
int pcd=cd;
do{
if(ta[cd]!=a[cd]){
tk[cd]++;
ta[cd]++;
c--;
}
cd++;
cd%=n;
}while(cd!=pcd&&c>0);
e+=c;
}
}
int s=0;
for(int i=0;i<n;i++){
s+=a[i]-ta[i];
if(tk[i]<k)f=0;
}
if(s>e)f=0;
if(f){
//debug(s)debug(e)
//debug(bm)
ans=min(ans,e-s);
}
}
if(ans==LLONG_MAX)cout<<"Impossible\n";
else cout<<ans<<'\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... |