#include <bits/stdc++.h>
const int MN = 1e6 + 5;
const long long inf = 0x3f3f3f3f3f3f3f3f;
int n;
long long r1, r2, r3, d;
long long dp[MN][3], a[MN];
void rw(long long &x, long long y) {
  if (y < x) x = y;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin >> n >> r1 >> r2 >> r3 >> d;
  dp[0][0] = 0;
  dp[0][1] = inf;
  for (int i = 1; i < n; ++i) {
    std::cin >> a[i];
    dp[i][0] = dp[i][1] = dp[i][2] = inf;
    rw(dp[i][0], dp[i - 1][0] + a[i] * r1 + r3 + d);
    rw(dp[i][0], dp[i - 1][1] + r2 + r1 + d);
    rw(dp[i][0], dp[i - 1][1] + (a[i] + 2) * r1 + d);
    rw(dp[i][1], dp[i][0] + d + d);
    rw(dp[i][1], dp[i - 1][0] + r2 + r1 + d + d + d);
    rw(dp[i][1], dp[i - 1][0] + (a[i] + 2) * r1 + d + d + d);
    rw(dp[i][0], dp[i][1]);
  }
  std::cin >> a[n];
  dp[n][0] = dp[n][1] = dp[n][2] = inf;
  rw(dp[n][0], dp[n - 1][0] + a[n] * r1 + r3);
  rw(dp[n][0], dp[n - 1][1] + r2 + r1);
  rw(dp[n][0], dp[n - 1][1] + (a[n] + 2) * r1);
  rw(dp[n][1], dp[n][0] + d + d);
  rw(dp[n][1], dp[n - 1][0] + r2 + r1 + d + d);
  rw(dp[n][1], dp[n - 1][0] + (a[n] + 2) * r1 + d + d);
  rw(dp[n][0], dp[n][1]);
  rw(dp[n][2], a[n] * r1 + r3);
  rw(dp[n][2], (a[n] + 2) * r1 + d + d);
  rw(dp[n][2], r2 + r1 + d + d);
  for (int i = n - 1; i; --i) {
    rw(dp[i][2], dp[i + 1][2] + a[i] * r1 + r3);
    rw(dp[i][2], dp[i + 1][2] + (a[i] + 2) * r1);
    rw(dp[i][2], dp[i + 1][2] + r2 + r1);
    dp[i][2] += d + d;
  }
  long long ans = dp[1][2];
  rw(ans, dp[n][0]);
  for (int i = 2; i < n; ++i) rw(ans, dp[i - 1][0] + dp[i][2]);
  std::cout << ans << std::endl;
}
