#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector VI; typedef pair PII; #define REP(i,s,t) for(int i=(s);i<(t);i++) #define FILL(x,v) memset(x,v,sizeof(x)) const int INF = (int)1E9; int main() { int n, d, c; cin >> n >> d >> c; VI b(n); REP(i,0,n) cin >> b[i]; int l = 0, r = d; while (l <= r) { int m = (l + r) / 2, cur = c; bool ok = true; REP(i,0,n) { if (b[i] < m) { cur -= m - b[i]; if (cur < 0) { ok = false; break; } } else cur += min(b[i] - m, c - cur); } if (ok) l = m + 1; else r = m - 1; } int lo = r; l = 0; r = d; while (l <= r) { int m = (l + r) / 2, cur = 0; bool ok = true; REP(i,0,n) { if (b[i] > m) { cur += b[i] - m; if (cur > c) { ok = false; break; } } else cur -= min(m - b[i], cur); } if (ok) r = m - 1; else l = m + 1; } int hi = l; cout << max(0, hi - lo) << endl; return 0; }