#include #include #include using namespace std; int main() { int n, m, k; cin >> n >> m >> k; vector v; for(int i = 0; i < m-1; i++) v.push_back(0); for(int i = 0; i < n; i++) { int64_t x; cin >> x; v.push_back(x); } for(int i = 0; i < m-1; i++) v.push_back(0); vector paid(v.size()); vector> unused; int64_t ret = 0; int64_t use = 0; for(int i = 0; i < v.size(); i++) { if(i >= m) use -= paid[i-m]; unused.push_back({v[i], i}); while(use < k && unused.size()) { auto [v, from] = unused.back(); unused.pop_back(); if(from <= i-m) continue; int64_t take = min(k-use, v); paid[from] += take; use += take; ret += take; v -= take; if(v) unused.push_back({v, from}); } } cout << ret << "\n"; }