func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MOD = 1000000007;   const long long N = 100000;   template <typename T>   ostream &operator<<(ostream &os, const vector<T> &v) {     os <<  { ;     for (auto it = v.begin(); it != v.end(); ++it) {       if (it != v.begin()) os <<  ,  ;       os << *it;     }     return os <<  } ;   }   template <typename first, typename second>   ostream &operator<<(ostream &os, const pair<first, second> &p) {     return os <<  (  << p.first <<  ,   << p.second <<  ) ;   }   template <typename T>   ostream &operator<<(ostream &os, const set<T> &v) {     os <<  [ ;     for (auto it = v.begin(); it != v.end(); ++it) {       if (it != v.begin()) os <<  ,  ;       os << *it;     }     return os <<  ] ;   }   template <typename T>   ostream &operator<<(ostream &os, const multiset<T> &v) {     os <<  [ ;     for (auto it = v.begin(); it != v.end(); ++it) {       if (it != v.begin()) os <<  ,  ;       os << *it;     }     return os <<  ] ;   }   template <typename first, typename second>   ostream &operator<<(ostream &os, const map<first, second> &v) {     os <<  [ ;     for (auto it = v.begin(); it != v.end(); ++it) {       if (it != v.begin()) os <<  ,  ;       os << it->first <<   =   << it->second;     }     return os <<  ] ;   }   pair<long long, long long> get(multiset<long long> &m) {     auto it = m.end();     it--;     return {*m.begin(), *it};   }   int32_t main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     long long n;     cin >> n;     long long p;     cin >> p;     long long q;     cin >> q;     long long r;     cin >> r;     vector<long long> a(n);     for (long long i = 0; i < n; i++) {       cin >> a[i];     }     vector<long long> temp;     temp.push_back(p);     temp.push_back(q);     temp.push_back(r);     multiset<long long> m(a.begin(), a.end()), pref;     ;     long long res = LLONG_MIN;     for (long long i = 0; i < n; i++) {       pref.insert(a[i]);       pair<long long, long long> left = get(pref);       pair<long long, long long> ryt = get(m);       long long mid = a[i];       long long cur = mid * temp[1];       if (temp[0] > 0) {         cur += (temp[0] * left.second);       } else {         cur += (temp[0] * left.first);       }       if (temp[2] > 0) {         cur += (temp[2] * ryt.second);       } else {         cur += (temp[2] * ryt.first);       }       res = max(res, cur);       m.erase(m.find(a[i]));     }     cout << res <<   n ;     return 0;   }   