#include <bits/stdc++.h>
using namespace std;
const int i_inf = 1e9;
const long long inf = 4e18;
const long long mod = 1000000007;
const long double eps = 1e-13;
const long double pi = 3.14159265359;
mt19937 _rand(time(NULL));
clock_t timer = clock();
const int mxn = 5e5;
const long long A = 911382323;
const long long B = 972663749;
long long modpow(long long x, long long n) {
  if (n == 0) return 1 % mod;
  long long u = modpow(x, n / 2);
  u = (u * u) % mod;
  if (n % 2) u = (u * x) % mod;
  return u;
}
long long inverse(long long x) { return modpow(x, mod - 2); }
long long add(long long ans, long long val) {
  ans = (ans + val) % mod;
  return ans;
}
long long mul(long long ans, long long val) {
  ans = (ans * val) % mod;
  return ans;
}
long long sub(long long ans, long long val) {
  ans = (ans - val) % mod;
  if (ans < 0) ans += mod;
  return ans;
}
long long _div(long long ans, long long val) {
  ans = (ans * inverse(val)) % mod;
  return ans;
}
long long fakt[mxn];
long long bc(long long n, long long k) {
  return (fakt[n] * inverse((fakt[k] * fakt[n - k]) % mod)) % mod;
}
long long sq(long long x) { return x * x; }
void solve() {
  int n;
  long long r1, r2, r3, d;
  cin >> n >> r1 >> r2 >> r3 >> d;
  r1 = min(r1, r3);
  long long a[n];
  for (int i = (0); i < (n); i++) {
    cin >> a[i];
  }
  long long dp[n][2][2];
  for (int i = (0); i < (n); i++)
    for (int j = (0); j < (2); j++)
      for (int k = (0); k < (2); k++) dp[i][j][k] = inf;
  dp[0][0][0] = r1 * a[0] + r3;
  dp[0][0][1] =
      min(r1 * a[0] + r3, min(r2 + r1, r1 * (a[0] + 2))) + (n - 1) * d;
  dp[0][1][0] = min(r2 + r1, r1 * (a[0] + 2)) + 2 * d;
  for (int i = (1); i < (n - 1); i++) {
    long long ord = r1 * a[i] + r3;
    long long las = min(r2 + r1, r1 * (a[i] + 2));
    long long add = (n - i - 1) * d;
    dp[i][0][0] = min(dp[i][0][0], dp[i - 1][0][0] + d + ord);
    dp[i][0][0] = min(dp[i][0][0], dp[i - 1][1][0] + d + min(las, ord));
    dp[i][0][1] = min(dp[i][0][1], dp[i - 1][0][0] + d + add + min(las, ord));
    dp[i][0][1] = min(dp[i][0][1], dp[i - 1][1][0] + d + add + min(las, ord));
    dp[i][0][1] = min(dp[i][0][1], dp[i - 1][0][1] + d + min(las, ord));
    dp[i][1][0] = min(dp[i][1][0], dp[i - 1][0][0] + d + 2 * d + las);
  }
  long long ord = r1 * a[n - 1] + r3;
  long long las = min(r2 + r1, r1 * (a[n - 1] + 2));
  dp[n - 1][0][0] = min(dp[n - 1][0][0], dp[n - 2][0][0] + d + ord);
  dp[n - 1][0][0] = min(dp[n - 1][0][0], dp[n - 2][1][0] + d + min(las, ord));
  dp[n - 1][0][1] = min(dp[n - 1][0][1], dp[n - 2][0][1] + d + ord);
  dp[n - 1][0][1] = min(dp[n - 1][0][1], dp[n - 2][0][1] + d + 2 * d + las);
  dp[n - 1][1][0] = min(dp[n - 1][1][0], dp[n - 2][0][0] + d + 2 * d + las);
  cout << min(min(dp[n - 1][0][0], dp[n - 1][1][0]), dp[n - 1][0][1]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int tc = 1;
  while (tc--) solve();
}
