#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("inline")
#include <bits/stdc++.h>
using namespace std;
#define kien long long
#define pb push_back
#define FOR(i, a, b) for (int i = a;i <= b; i++)
#define FORD(i, a, b) for (int i = a;i >= b; i--)
#define pii pair<int, int>
#define dembit(a) __builtin_popcountll(a)
#define task "a"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define debug(x) cout << x << " ";
#define down cout << "\n"
const kien MOD = 1e9 + 7;
const int NTEST = 100;
const int Million = 1e6 + 5;
const int MXN = 1e5 + 5;
mt19937 rd(chrono::high_resolution_clock::now().time_since_epoch().count());
kien rand(kien l, kien r) {
assert(l <= r);
return uniform_int_distribution<kien>(l, r)(rd);
}
kien n, k, m, dem, b[MXN + 5], u, v, a[1000000], pre[305];
kien maxx, minn, vtr, l, r, ans, dp[305 * 305], sum;
//
//int tknp (int mid) {
// int l = 1, r = n;
//
//}
void solve() {
cin >> n >> m >> k;
bool check = true;
FOR (i, 1, n) {
cin >> a[i];
if (a[i] < k) check = false;
sum += a[i];
}
FOR (i, 1, m) {
cin >> b[i];
}
sort (b + 1, b + 1 + m);
FOR (i, 1, m) {
pre[i] = pre[i - 1] + b[i];
}
if (k > m or !check or sum > pre[m]) {
cout << "Impossible\n";
return;
}
// if (sum <= pre[k]) {
// cout << pre[k] - sum;
// return;
// }
FOR (i, 1, 300 * 300) dp[i] = -MOD;
dp[0] = 0;
FOR (i, 1, m) {
minn = min(b[i], n);
FORD (j, pre[m], b[i]) {
dp[j] = max(dp[j], dp[j - b[i]] + minn);
}
}
ans = -1;
FOR (i, sum, pre[m]) {
if (dp[i] >= n * k) {
ans = i;
break;
}
}
if (ans != -1) {
cout << ans - sum;
return;
}
else cout << "Impossible\n";
}
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen(task".inp", "r")) {
fin(task); fou(task);
}
int t = 1; //cin >> t;
while(t--) solve();
cerr << "\n" << 1.0 * clock() / CLOCKS_PER_SEC << "s ";
}