#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define int long long
//using namespace __gnu_pbds;
using namespace std;
const int mod = 998244353;
const int inf = 1e18;
const int maxx = 5e5 + 5;
const int lg = 26;
//typedef tree <int, null_type, less_equal <int>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset;
int n, a, b;
vector <int> g, pre;
vector <vector <int> > dp;
int sum(int l, int r) {
return pre[r + 1] - pre[l];
}
void solve () {
int mx = 0, l = 0, r = 0, sum1 = 0, bt = 0, ans = -1;
cin >> n >> a >> b;
g.resize(n);
pre.resize(n + 1, 0);
for (int i = 1; i <= n; i++) {
cin >> g[i];
pre[i] = pre[i - 1] + g[i];
sum1 += g[i];
}
bt = (1 << (__lg(sum1) + 1)) - 1;
dp.assign(n + 1, vector <int> (bt + 1, inf));
dp[0][0] = 0;
for (int i = 1; i <= n; i++) {
for (int k = bt; k >= 0; k--) {
for (int j = 0; j < i; j++) {
int s = sum(j, i - 1);
dp[i][s | k] = min(dp[i][s | k], dp[j][k] + 1);
}
}
}
for (int k = 0; k <= bt; k++) {
if (dp[n][k] >= a && dp[n][k] <= b) {
ans = k;
break;
}
}
cout << ans << endl;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}