#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//以吉他手的唱歌顺序为阶段进行划分
//状态表示:设dp[i][j](j = 0或1)表示吉他手在唱第i首歌之前 将音量调高(1),或调低(0)能获得的最大音量
//转移:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]) - c[i],前提是dp[i - 1][0]和dp[i - 1][1]均大于等于c[i]
//dp[i][1] = max(dp[i - 1][0], dp[i - 1][1]) + c[i], 前提是dp[i - 1][0]和dp[i - 1][1]均小于等于maxlevel - c[i]
//求解目标:max(dp[n][0], dp[n][1])
//初始状态: dp[0][0] = dp[0][1] = beginlevel
const int MAXN = 55;
int n, beginlevel, maxlevel, c[MAXN], dp[MAXN][2];
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> beginlevel >> maxlevel;
for(int i = 1; i <= n; ++i) {
cin >> c[i];
dp[i][0] = dp[i][1] = -1;
}
dp[0][0] = beginlevel, dp[0][1] = beginlevel;
for(int i = 1; i <= n; ++i) {
if(dp[i - 1][0] - c[i] >= 0) {
dp[i][0] = max(dp[i][0], dp[i - 1][0] - c[i]);
}
if(dp[i - 1][1] - c[i] >= 0) {
dp[i][0] = max(dp[i][0], dp[i - 1][1] - c[i]);
}
if(dp[i - 1][0] + c[i] <= maxlevel) {
dp[i][1] = max(dp[i][1], dp[i - 1][0] + c[i]);
}
if(dp[i - 1][1] + c[i] <= maxlevel) {
dp[i][1] = max(dp[i][1], dp[i - 1][1] + c[i]);
}
}
cout << max(dp[n][0], dp[n][1]);
return 0;
}
only 30pts