#include "lawn.h"
#include <iostream>
using namespace std;
using ll=long long;
namespace
{
const int MN=5013;
const ll inf64=1e18;
int N; ll C, B;
ll A[MN], V[MN], pre[MN];
ll dp[MN][MN];
}
ll mow(int n, int c, int b, vector<int> &a, vector<int> &v)
{
N=n; C=c; B=b;
for (int i=1; i<=N; i++) A[i]=a[i-1];
for (int i=1; i<=N; i++)
{
V[i]=v[i-1];
pre[i]=pre[i-1]+V[i];
}
for (int i=1; i<=N; i++) for (int j=0; j<C; j++) dp[i][j]=inf64;
dp[0][0]=0;
for (int i=1; i<=N; i++)
{
for (int j=0; j<C; j++)
{
int k=(j+V[i])%C;
int cnt=(j+V[i])/C;
if (k) dp[i][((k-pre[i])%C+C)%C]=min(dp[i][((k-pre[i])%C+C)%C], dp[i-1][((j-pre[i-1])%C+C)%C]+B*cnt+A[i]*(cnt+1));
else dp[i][((k-pre[i])%C+C)%C]=min(dp[i][((k-pre[i])%C+C)%C], dp[i-1][((j-pre[i-1])%C+C)%C]+B*cnt+A[i]*cnt);
dp[i][((-pre[i])%C+C)%C]=min(dp[i][((-pre[i])%C+C)%C], dp[i][((k-pre[i])%C+C)%C]+B);
}
}
return dp[N][((-pre[N])%C+C)%C];
}