#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7, M = 2 * N;
long long mem[N][3];
int a[N];
long long r1, r2, r3, d;
int n;
long long dp(int i, bool bad) {
  if (i == n) return bad * d;
  long long &ret = mem[i][bad];
  if (~ret) return ret;
  long long op1 = a[i] * r1 + r3 + dp(i + 1, 0);
  if (bad && i != n - 1) op1 += d;
  long long op2 = r2 + r1 + dp(i + 1, !bad) + d;
  long long op3 = a[i] * r1 + 2 * r1 + dp(i + 1, !bad) + d;
  ret = min({op1, op2, op3}) + (i == n - 1 ? 0 : d);
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  scanf("%d%lld%lld%lld%lld", &n, &r1, &r2, &r3, &d);
  for (int i = 0; i < n; ++i) {
    scanf("%d", a + i);
  }
  memset(mem, -1, sizeof mem);
  printf("%lld\n", dp(0, 0));
}
