#include <bits/stdc++.h>
// freopen
#define open freopen("stdin.txt", "r", stdin); freopen("stdout.txt", "w", stdout);
// int, double, string, char
#define ll long long
#define ull unsigned long long
#define ld long double
#define db double
#define str string
// double 2.0
#define cl ceil
#define rd round
#define tr trunc
#define fl floor
// cin, cout
#define co cout <<
#define ci cin >>
#define YES cout << "YES"
#define NO cout << "NO"
#define yes cout << "yes"
#define no cout << "no"
#define Yes cout << "Yes"
#define No cout << "No"
#define en << endl
#define fix(x) fixed << setprecision(x)
#define stp(x) setprecision(x)
// vector
#define vll vector <ll>
#define vld vector <ld>
#define vs vector <str>
#define vc vector <char>
// pair
#define plll pair<ll, ll>
#define plld pair<ll, ld>
#define plls pair<ll, str>
#define pllc pair<ll, char>
#define pldl pair<ld, ll>
#define pldd pair<ld, ld>
#define plds pair<ld, str>
#define pldc pair<ld, char>
#define psll pair<str, ll>
#define psld pair<str, ld>
#define pss pair<str, str>
#define psc pair<str, char>
#define pcll pair<char, ll>
#define pcld pair<char, ld>
#define pcs pair<char, str>
#define pcc pair<char, char>
// vector<pair>
#define vplll vector<pair<ll, ll> >
#define vplld vector<pair<ll, ld> >
#define vplls vector<pair<ll, str> >
#define vpllc vector<pair<ll, char> >
#define vpldl vector<pair<ld, ll> >
#define vpldd vector<pair<ld, ld> >
#define vplds vector<pair<ld, str> >
#define vpldc vector<pair<ld, char> >
#define vpsll vector<pair<str, ll> >
#define vpsld vector<pair<str, ld> >
#define vpss vector<pair<str, str> >
#define vpsc vector<pair<str, char> >
#define vpcll vector<pair<char, ll> >
#define vpcld vector<pair<char, ld> >
#define vpcs vector<pair<char, str> >
#define vpcc vector<pair<char, char> >
// set
#define stll set <ll>
#define stld set <ld>
#define sts set <str>
#define stc set <char>
// multiset
#define mstll multiset <ll>
#define mstld multiset <ld>
#define msts multiset <str>
#define mstc multiset <char>
// set pair
#define stplll set<pair<ll, ll> >
#define stplld set<pair<ll, ld> >
#define stplls set<pair<ll, str> >
#define stpllc set<pair<ll, char> >
#define stpldl set<pair<ld, ll> >
#define stpldd set<pair<ld, ld> >
#define stplds set<pair<ld, str> >
#define stpldc set<pair<ld, char> >
#define stpsll set<pair<str, ll> >
#define stpsld set<pair<str, ld> >
#define stpss set<pair<str, str> >
#define stpsc set<pair<str, char> >
#define stpcll set<pair<char, ll> >
#define stpcld set<pair<char, ld> >
#define stpcs set<pair<char, str> >
#define stpcc set<pair<char, char> >
// multiset pair
#define mstplll multiset<pair<ll, ll> >
#define mstplld multiset<pair<ll, ld> >
#define mstplls multiset<pair<ll, str> >
#define mstpllc multiset<pair<ll, char> >
#define mstpldl multiset<pair<ld, ll> >
#define mstpldd multiset<pair<ld, ld> >
#define mstplds multiset<pair<ld, str> >
#define mstpldc multiset<pair<ld, char> >
#define mstpsll multiset<pair<str, ll> >
#define mstpsld multiset<pair<str, ld> >
#define mstpss multiset<pair<str, str> >
#define mstpsc multiset<pair<str, char> >
#define mstpcll multiset<pair<char, ll> >
#define mstpcld multiset<pair<char, ld> >
#define mstpcs multiset<pair<char, str> >
#define mstpcc multiset<pair<char, char> >
// map
#define mll map<ll, ll>
#define mld map<ll, ld>
#define mls map<ll, str>
#define mlc map<ll, char>
#define mdl map<ld, ll>
#define mdd map<ld, ld>
#define mds map<ld, str>
#define mdc map<ld, char>
#define msl map<str, ll>
#define msd map<str, ld>
#define mss map<str, str>
#define msc map<str, char>
#define mcl map<char, ll>
#define mcd map<char, ld>
#define mcs map<char, str>
#define mcc map<char, char>
// const
#define cll const ll
#define cull const ull
#define cld const ld
#define cc const char
#define cs const str
// prosta 1
#define to_str to_string
#define stl stoll
#define pb push_back
#define pp pop_back
#define sz size()
#define cr clear()
#define rvs reverse
#define ins insert
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define all1(x) x.begin() + 1, x.end() + 1
#define allx(x, n, k) x + k, x + n + k
#define F first
#define S second
#define mp make_pair
// prosta 2
#define nxt_per next_permutation
#define prev_per prev_permutation
#define use using namespace std
// for
#define fori(i, y, n, x) for (ll i = y; i <= n; i += x)
#define brk break
#define con continue
#define rt return
#define rt0 return 0
// faster
#define sho_tam ios_base::sync_with_stdio(false); cin.tie(nullptr);
use;
cll N_min = 1e3 + 6;
cll N = 1e5 + 1;
cll NN = 4e5 + 3;
cll N_max = 1e6 + 1;
cll NNN = 1e8;
cll mod = 1e9 + 7;
cll inf = 1e18;
cld pi1 = 3.14159;
cld pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082;
ll prime[N_max];
void primes() {
prime[0] = prime[1] = 1;
for (ll i = 2; i < N_max; i++) if (prime[i] == 0) for (ll j = i + i; j < N_max; j += i) prime[j] = 1;
}
ll fct[N_max];
void fact() {
fct[0] = 1;
for (ll i = 1; i < N_max; i++) fct[i] = (fct[i - 1] * i) % mod;
}
ull binpow(ull a, ull b) {
if (b == 0) rt 1;
ull o = binpow(a, b / 2);
o *= o;
o %= mod;
if (b % 2 == 1) o *= a;
o %= mod;
rt o;
}
void vvv() {
ll n, m, k;
ci n >> m >> k;
ll a[n + 1], b[m + 1], c[m + 1], aa[n + 1];
for (ll i = 1; i <= n; i++) ci a[i], aa[i] = a[i];
for (ll j = 1; j <= m; j++) ci b[j];
sort(allx(b, m, 1));
for (ll j = 1; j <= m; j++) c[j] = b[j];
if (m < k) {
co "Impossible";
rt;
}
for (ll i = 1; i <= n; i++) {
if (m == 1) {
if (b[1] < a[i]) {
co "Impossible";
rt;
}
b[1] -= a[i];
a[i] = 0;
}
else {
if (k == 2) {
if (b[1] > b[2]) swap(b[1], b[2]);
if (b[1] == 0) {
co "Impossibler";
rt;
}
ll x = b[1] + b[2];
if (x - 1 < a[i]) {
co "Impossible";
rt;
}
if (b[1] <= a[i]) a[i] -= b[1] - 1, b[1] = 1;
else b[1] -= a[i], a[i] = 0;
if (b[2] <= a[i]) a[i] -= b[2], b[2] = 0;
else b[2] -= a[i], a[i] = 0;
if (a[i] != 0) {
co "Impossible";
rt;
}
}
else {
ll x = b[1] + b[2];
if (x < a[i]) {
co "Impossible";
rt;
}
if (b[1] <= a[i]) a[i] -= b[1], b[1] = 0;
else b[1] -= a[i], a[i] = 0;
if (b[2] <= a[i]) a[i] -= b[2], b[2] = 0;
else b[2] -= a[i], a[i] = 0;
if (a[i] != 0) {
co "Impossible";
rt;
}
}
}
}
ll mn;
if (k == 2) mn = b[1] + b[2];
else {
if (m == 1) mn = b[1];
else {
if (b[1] == 0) {
if (b[2] == c[2]) mn = 0;
else mn = b[2];
}
else mn = b[1];
}
}
if (k == 1 and m != 1) {
b[1] = c[1], b[2] = c[2];
for (ll i = 1; i <= n; i++) {
a[i] = aa[i];
if (b[2] <= a[i]) a[i] -= b[2], b[2] = 0;
else b[2] -= a[i], a[i] = 0;
if (b[1] <= a[i]) a[i] -= b[1], b[1] = 0;
else b[1] -= a[i], a[i] = 0;
}
if (b[2] == 0) {
if (b[1] == c[1]) mn = 0;
else mn = min(mn, b[1]);
}
else mn = min(mn, b[2]);
co mn;
}
else co mn;
}
int main() {
// open;
sho_tam
ll KKK = 1;
// ci KKK;
// fact();
// primes();
for (int ooo = 1; ooo <= KKK; ooo++) vvv();
rt0;
}
/*
CHAR_MIN : -128
CHAR_MAX : 127
SHRT_MIN : -32768
SHRT_MAX : 32767
USHRT_MAX : 65535
INT_MIN : -2147483648
INT_MAX : 2147483647
UINT_MAX : 4294967295
LONG_MIN : -9223372036854775808
LONG_MAX : 9223372036854775807
ULONG_MAX : 18446744073709551615
LLONG_MIN : -9223372036854775808
LLONG_MAX : 9223372036854775807
ULLONG_MAX : 18446744073709551615
*/
/*
| ________ ____________________________ ____________________________
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | / |
| / \ | | | /\ |
| /____________________________\ | |–––––––––––––––––––––––– | / \ |––––––––––––––––––––––––
| /——————————————————————————————\ | | |/ \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ | | | \ |
| / \ |_____________________________ |___________________________ | \ |___________________________
*/
| # | 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... |