program main implicit none integer*8::N,A,B,W,i,j,tmp integer*8,allocatable::D(:) integer*8,allocatable::dp(:) read *, N,A,B,W allocate(D(N)) allocate(dp(0:N)) read *, D dp(0) = W + D(1) dp(1) = W - A + B*1 do i=2,N tmp = MINVAL(dp(0:i-1)) + D(i) do j=i,1,-1 dp(j) = dp(j-1) - A + B*j end do dp(0) = tmp end do print '(i0)', MINVAL(dp(0:N)) end program