#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
int n,bl,ml,a[1002],fx[2]={1,-1},ans,flag=1;
bool vis[1002][52];
struct node{
int s,step;
};
queue <node> q;
int main(){
scanf("%d%d%d",&n,&bl,&ml);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
q.push({bl,1});
vis[bl][1]=1;
while (!q.empty()){
node f=q.front();
q.pop();
flag=max(flag,f.step);
if (f.step==n+1){
ans=max(ans,f.s);
continue;
}
for (int i=0;i<2;i++){
int ss=f.s+a[f.step]*fx[i];
if (ss>=0 && ss<=ml && !vis[ss][f.step+1]){
vis[ss][f.step+1]=1;
q.push({ss,f.step+1});
}
}
}
printf("%d",flag<n?-1:ans);
return 0;
}