#include <bits/stdc++.h>
using namespace std;
int m, n;
constexpr int MAXN = 100000 + 5;
constexpr int MAXM = (1 << 16) + 5;
int w[MAXN];
long long money[MAXN];
int qzh[MAXN];
long long dp[MAXM];
bool check(int l, int r, int now) {
long long sum = qzh[r] - qzh[l];
if (now >= sum) {
return 1;
}
else {
return 0;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int ssum = 0;
cin >> m >> n;
for (register int i = 1; i <= m; i++) {
cin >> money[i];
ssum += money[i];
}
for (register int i = 1; i <= n; i++) {
cin >> w[i];
}
for (register int i = 1; i <= n; i++) {
qzh[i] = qzh[i - 1] + w[i];
}
for (register int k = 0; k < (1 << m); ++k) {
for (register int i = 1; i <= m; i++) {
if (!(k & (1 << (i - 1)))) {
continue;
}
long long ans = dp[k ^ (1 << (i - 1))];
int l = ans + 1, r = n;
long long result = ans;
while (l <= r) {
int mid = (l + r) / 2;
if (check(ans, mid, money[i])) {
result = mid;
l++;
}
else {
r--;
}
}
dp[k] = max(dp[k], result);
}
}
long long result = INT_MAX;
for (register int k = 0; k < (1 << m); ++k) {
if (dp[k] == n) {
long long sum = 0;
for (register int i = 1; i <= m; i++) {
if (!(k & (1 << (i - 1)))) {
continue;
}
sum += money[i];
}
result = min(result, sum);
}
}
if (result == INT_MAX)cout << -1 << endl;
else cout << ssum - result << endl;
return 0;
}