Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaunt Shack as he suspected a Horcrux to be present there. He saw Marvolo Gaunt's Ring and identified it as a Horcrux. Although he destroyed it, he is still affected by its curse. Professor Snape is helping Dumbledore remove the curse. For this, he wants to give Dumbledore exactly x drops of the potion he made. 

Value of x is calculated as maximum of p·ai + q·aj + r·ak for given p, q, r and array a1, a2, ... an such that 1 ≤ i ≤ j ≤ k ≤ n. Help Snape find the value of x. Do note that the value of x may be negative.

Input

First line of input contains 4 integers n, p, q, r ( - 109 ≤ p, q, r ≤ 109, 1 ≤ n ≤ 105).

Next line of input contains n space separated integers a1, a2, ... an ( - 109 ≤ ai ≤ 109).

Output

Output a single integer the maximum value of p·ai + q·aj + r·ak that can be obtained provided 1 ≤ i ≤ j ≤ k ≤ n.

Examples

Input

5 1 2 3
1 2 3 4 5


Output

30


Input

5 1 2 -3
-1 -2 -3 -4 -5


Output

12

Note

In the first sample case, we can take i = j = k = 5, thus making the answer as 1·5 + 2·5 + 3·5 = 30.

In second sample case, selecting i = j = 1 and k = 5 gives the answer 12.
#include <bits/stdc++.h>
using namespace std;
using namespace std::chrono;
template <class T>
bool tmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool tmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
template <typename A>
istream& operator>>(istream& cin, vector<A>& v) {
  for (long long i = 1; i < v.size(); i++) cin >> v[i];
  return cin;
}
template <typename A>
ostream& operator<<(ostream& cout, vector<A> const& v) {
  cout << "[";
  for (long long i = 0; i < v.size(); i++) {
    if (i) cout << ", ";
    cout << v[i];
  }
  return cout << "]";
}
template <typename A, typename B>
ostream& operator<<(ostream& cout, pair<A, B> const& p) {
  return cout << "(" << p.first << ", " << p.second << ")";
}
template <typename A, typename B>
istream& operator>>(istream& cin, pair<A, B>& p) {
  cin >> p.first;
  return cin >> p.second;
}
template <typename T_container, typename T = typename enable_if<
                                    !is_same<T_container, string>::value,
                                    typename T_container::value_type>::type>
ostream& operator<<(ostream& os, const T_container& v) {
  os << '{';
  string sep;
  for (const T& x : v) os << sep << x, sep = ", ";
  return os << '}';
}
void dbg_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void dbg_out(Head H, Tail... T) {
  cerr << ' ' << H;
  dbg_out(T...);
}
long long logg2(long long n) {
  long long tmp;
  for (long long i = 0; i <= 32; i++) {
    tmp = 1 << i;
    if (tmp == n)
      return i;
    else if (tmp > n)
      return i - 1;
  }
  return 32;
}
mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
const long double pi = 3.14159265358979323846;
const long long mod = 1000000007;
long long n, m, k, q, l, r, x, y, z;
vector<long long> a, b, c;
string s, t;
long long ans = 0;
vector<vector<long long> > graph;
vector<bool> visited;
vector<long long> color;
vector<string> vss;
const long long dx[] = {-1, 0, 1, 0};
const long long dy[] = {0, 1, 0, -1};
long long MAXN = 2e5 + 9;
void solve(long long tc = 0) {
  cin >> n;
  c.resize(3);
  cin >> c[0] >> c[1] >> c[2];
  a.resize(n + 1);
  cin >> a;
  vector<vector<long long> > dp(n + 1, vector<long long>(3, LONG_MIN));
  dp[1][0] = a[1] * c[0];
  dp[1][1] = a[1] * (c[0] + c[1]);
  dp[1][2] = a[1] * (c[0] + c[1] + c[2]);
  for (long long i = 2; i <= n; i++) {
    dp[i][0] = max(dp[i - 1][0], a[i] * c[0]);
    dp[i][1] = max(dp[i - 1][1], dp[i][0] + a[i] * c[1]);
    dp[i][2] = max(dp[i - 1][2], dp[i][1] + a[i] * c[2]);
  }
  cout << dp[n][2] << '\n';
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  long long tc = 1;
  for (long long tt = 1; tt <= tc; tt++) {
    a.clear(), b.clear(), c.clear();
    graph.clear(), visited.clear(), color.clear();
    s.clear(), t.clear(), vss.clear();
    n = 0, m = 0, k = 0, q = 0, l = 0, r = 0, x = 0, y = 0, z = 0, ans = 0;
    solve(tt);
  }
  return 0;
}
