#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007, INF = 2000000001;
int dx[] = {0, 1, 0, -1, 1, 1, -1, -1, 0},
    dy[] = {-1, 0, 1, 0, -1, 1, 1, -1, 0};
const double EPS = 1e-9;
long long gcd(long long a, long long b) { return (b != 0) ? gcd(b, a % b) : a; }
long long modpow(long long a, long long x, long long m = mod) {
  int p = 1;
  while (x > 0) {
    if (x & 1 == 1) {
      p = p * a % m;
      --x;
    } else {
      x >>= 1;
      a = a * a % m;
    }
  }
  return p;
}
void z(const string& s, vector<int>& v) {
  int n = s.length();
  for (int i = 1, l = 0, r = 0; i < n; ++i) {
    if (i <= r) v[i] = min(v[i - l], r - i + 1);
    while (i + v[i] < n && s[v[i]] == s[i + v[i]]) ++v[i];
    if (i + v[i] - 1 > r) r = (l = i) + v[i] - 1;
  }
}
bool dfs(vector<vector<string> >& states, int sx, int sy, int n) {
  bool ans = false;
  if (n == 8)
    ans = true;
  else if (states[n][sy][sx] == 'S')
    ans = false;
  else
    for (int d = 0; d < 9 && !ans; ++d) {
      int x = sx + dx[d], y = sy + dy[d];
      if (min(x, y) >= 0 && max(x, y) < 8) {
        if (states[n][y][x] == '.') {
          ans = dfs(states, x, y, n + 1);
        }
      }
    }
  return ans;
}
void _a() {}
void _b() {}
void _c() {
  int n, l, r, ql, qr;
  cin >> n >> l >> r >> ql >> qr;
  vector<int> w(n + 1), d(n + 1);
  for (int i = 1; i <= n; ++i) {
    cin >> w[i];
    d[i] = w[i] + d[i - 1];
  }
  int ans = INF;
  for (int k = 0; k <= n; ++k) {
    int a = d[k] * l + (d[n] - d[k]) * r;
    if (k > n - k)
      a += (2 * k - n - 1) * ql;
    else if (k < n - k)
      a += (n - 2 * k - 1) * qr;
    ans = min(ans, a);
  }
  cout << ans;
}
void _d() {}
void build(vector<vector<pair<int, long long> > >& t,
           const vector<long long>& a, int v, int tl, int tr) {
  if (tl == tr) {
    for (int i = 0; i < 20; ++i) t[i][v].second = (a[tl] & (1 << i)) >> i;
  } else {
    int tm = (tl + tr) / 2;
    build(t, a, 2 * v, tl, tm);
    build(t, a, 2 * v + 1, tm + 1, tr);
    for (int i = 0; i < 20; ++i)
      t[i][v].second = t[i][2 * v].second + t[i][2 * v + 1].second;
  }
}
void push(vector<vector<pair<int, long long> > >& t, int v, int tl, int tr) {
  for (int i = 0; i < 20; ++i)
    if (t[i][v].first == 1) {
      t[i][2 * v].first = (t[i][2 * v].first + 1) % 2;
      t[i][2 * v + 1].first = (t[i][2 * v + 1].first + 1) % 2;
      t[i][v].first = 0;
      long long tm = (tl + tr) / 2;
      t[i][2 * v].second = tm - tl + 1 - t[i][2 * v].second;
      t[i][2 * v + 1].second = tr - tm - t[i][2 * v + 1].second;
    }
}
long long get_sum(vector<vector<pair<int, long long> > >& t, int v, int tl,
                  int tr, int l, int r) {
  long long a = 0;
  if (l <= r) {
    if (tl == l && tr == r) {
      for (int i = 0; i < 20; ++i) a += t[i][v].second * (1 << i);
    } else {
      push(t, v, tl, tr);
      int tm = (tl + tr) / 2;
      a = get_sum(t, 2 * v, tl, tm, l, min(r, tm)) +
          get_sum(t, 2 * v + 1, tm + 1, tr, max(l, tm + 1), r);
    }
  }
  return a;
}
void update(vector<vector<pair<int, long long> > >& t, int v, int tl, int tr,
            int l, int r, long long x) {
  if (l <= r) {
    if (tl == l && tr == r) {
      for (int i = 0; i < 20; ++i) {
        t[i][v].first = (t[i][v].first + 1) % 2;
        if (t[i][v].first == 1) t[i][v].second = tr - tl + 1 - t[i][v].second;
      }
    } else {
      push(t, v, tl, tr);
      int tm = (tl + tr) / 2;
      update(t, 2 * v, tl, tm, l, min(r, tm), x);
      update(t, 2 * v + 1, tm + 1, tr, max(l, tm + 1), r, x);
      for (int i = 0; i < 20; ++i)
        t[i][v].second = t[i][2 * v].second + t[i][2 * v + 1].second;
    }
  }
}
void _e() {}
long long gcdex(long long a, long long b, long long& x, long long& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  } else {
    long long x1, y1;
    long long g = gcdex(b % a, a, x1, y1);
    x = y1 - b / a * x1;
    y = x1;
    return g;
  }
}
int main() {
  _c();
  return 0;
}
