#include <bits/stdc++.h>
using namespace std;
int n, a, b;
vector<int> p;
map<tuple<long long, int, int>, long long> dp;
long long go(long long Or, int i, int k) {
if (i == n) return a <= k && k <= b ? 0 : -1;
if (k >= b) return -1;
if (dp.find({Or, i, k}) != dp.end()) return dp[{Or, i, k}];
long long ans = -1, cur = 0;
vector<pair<long long, int>> v;
for (int j = i; j < n; j++) {
cur += p[j];
v.push_back({(~Or & cur), j});
}
sort(v.rbegin(), v.rend());
for (int i = 0; i < v.size();) {
auto nxt = go(Or + v[i].first, v[i].second + 1, k + 1);
if (nxt != -1) {
if (ans == -1) ans = v[i].first + nxt;
else ans = min(ans, v[i].first + nxt);
}
int j = i;
while (j < v.size() && v[j].first == v[i].first) {
j++;
}
i = j;
}
return dp[{Or, i, k}] = ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> a >> b;
p.resize(n);
for (int &x : p) {
cin >> x;
}
cout << go(0, 0, 0) << '\n';
return 0;
}