#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; int INF = INT_MAX / 2; double EPS = 1e-10; int main() { int n, W, H; while (cin >> n >> W >> H) { int N = W + n + W; vector A(N); ll sum = 0; for (int i = W; i < W + n; i++) { scanf("%d", &A[i]); sum += A[i]; } if (sum < (ll)W * H) { cout << -1 << endl; continue; } vector x(N + 1), y(N + 1); for (int i = 1; i <= N; i++) { x[i] = x[i - 1]; y[i] = y[i - 1]; if (A[i - 1] < H) x[i] += H - A[i - 1]; if (A[i - 1] > H) y[i] += A[i - 1] - H; } ll mini = LLONG_MAX; for (int i = 0; i + W <= N; i++) { ll a = x[i + W] - x[i], b = y[i + W] - y[i]; mini = min(mini, max(a, b)); } cout << mini << endl; } }