一定要坚信 进制类的题一定是按位贪心!!!!!!!!!!!!
然后就这些了
0.0
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<vector>
#define T 2002
#define ll long long
using namespace std;
long long sc()
{
long long i=0; char c=getchar();
while(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
return i;
}
int ff[2202];
bool f[102][102];
long long a[T],ans=0;
int n,A,B;
void dfs1()
{
for(int k=60;k;k--)
{
memset(f,0,sizeof(f));
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=min(i,B);j++)
{
for(int s=0;s<i;s++)
if(f[s][j-1])
{
if(((a[i]-a[s]>>k)|(ans>>k))==(ans>>k))
if((a[i]-a[s]&(1ll<<k-1))==0)
{
f[i][j]=1;
break;
}
}
}
ans+=(1ll<<k-1);
for(int i=A;i<=B;i++)
if(f[n][i])
{
ans-=(1ll<<k-1);
break;
}
}
}
void dfs2()
{
for(int k=60;k;k--)
{
memset(ff,-1,sizeof(ff));
ff[0]=0;
for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
if(ff[j]!=-1)
if(((a[i]-a[j]>>k)|(ans>>k))==(ans>>k))
if((a[i]-a[j]&(1ll<<k-1))==0)
{
if(ff[i]==-1) ff[i]=ff[j]+1;
else ff[i]=min(ff[i],ff[j]+1);
}
if(ff[n]==-1||ff[n]>B) ans+=(1ll<<k-1);
}
}
int main()
{
n=sc();A=sc();B=sc();
for(int i=1;i<=n;i++)a[i]=sc()+a[i-1];
if(A!=1)dfs1();
else dfs2();
cout<<ans;
return 0;
}