//vl arr;
//ll n,x;
//ll solve(ll k){
//    ll ans = x*(k+n);
//    ll rem = n;
//    for(int i = 1; ;++i){
//        ll take = min(k,rem);
//        if(take == 0)
//            break;
//        ans += (arr[rem]-arr[rem-take])*(i==1?5:2*i+1);
//        rem -= take;
//        if(ans > INF)
//            return INF;
//    }
//    //watch(k);
//    //watch(ans);
//    return ans;
//}
//ll _(){
//    cin >> n >> x;
//    arr.resize(n);
//    cin >> arr;
//    arr.insert(arr.begin(),0);
//    for(int i = 1; i <= n; ++i)
//        arr[i] += arr[i-1];
//    ll ans = INF;
//    for(int k = 1; k <= n; ++k)
//        ans = min(ans,solve(k));
//    return ans;
//}
//
//
// ================================================ 
// ^^^	ABOVE is what I wrote in my editor	^^^
// ------------------------------------------------ 
// vvv	BELOW is automatically generated 	vvv
// ================================================ 
#include <set>
#include <iomanip>
#include <cassert>
#include <vector>
#include <iostream>
#define all(v) (v).begin(),(v).end()
#define watch(x) cout << (#x) << " = " << x << '\n'
using namespace std;
typedef long long ll;
typedef vector<ll> vl;
template<typename IT>
ostream &print(IT b, IT e, string sep = " ", ostream &stream = cout){
    for(IT it = b; it != e; ++it){
        stream << *it;
        if(it+1 != e) stream << sep;
    } 
    return stream;
}
template<typename IT> istream &read(IT b, IT e, istream &stream = cin){
    for(IT it = b; it != e; ++it)
        stream >> *it; 
    return stream;
}
template<typename T> ostream &operator<<(ostream &stream, vector<T> &t){
    return print(all(t)," ",stream);
}
template<typename T> ostream &operator<<(ostream &stream, vector<T> &&t){
    return print(all(t)," ",stream);
}
template<typename T> istream &operator>>(istream &stream, vector<T> &t){
    return read(all(t),stream);
}
template <typename T> 
void print(T x){
    cout << x << '\n';
}
template <typename t> 
void print(vector<t> arr,string sep=" "){
    if(arr.empty()){
        return;
    }
    print(arr.begin(),arr.end(),sep);
    cout << '\n';
}
template <typename T> 
void print(vector<vector<T> > arr){
    for(int i = 0; i < arr.size(); ++i){
        cout << "[" << arr[i] << "]";
        if(i+1 < arr.size())
            cout << ", ";
    }
    cout << '\n';
}
template<typename T>
T _();
const ll INF = ll(2e18)+666;
const ll MOD = 1e9+7;
template<typename T>
vector<T> operator+(const vector<T> &lhs, const vector<T> &rhs){
    vector<T> ans(lhs);
    assert(ans.size() == rhs.size());
    for(int i = 0; i < rhs.size(); ++i)
        ans[i] += rhs[i];
    return ans;
}
template<typename T>
vector<T> operator+=(vector<T> &lhs, const vector<T> &rhs){
    return lhs = lhs+rhs;
    //vector<T> ans(lhs);
    //assert(ans.size() == rhs.size());
    //for(int i = 0; i < rhs.size(); ++i)
    //ans[i] += rhs[i];
    //return ans;
}
template<typename T>
vector<T> operator-(const vector<T> &lhs, const vector<T> &rhs){
    vector<T> ans(all(lhs));
    assert(ans.size() == rhs.size());
    for(int i = 0; i < rhs.size(); ++i)
        ans[i] -= rhs[i];
    return ans;
}
template<typename T>
vector<T> operator-=(vector<T> &lhs, const vector<T> &rhs){
    return lhs = lhs-rhs;
    //vector<T> ans(lhs);
    //assert(ans.size() == rhs.size());
    //for(int i = 0; i < rhs.size(); ++i)
    //ans[i] += rhs[i];
    //return ans;
}
template<typename T>
T max(const vector<T> arr){
    assert(!arr.empty());
    T ans = arr[0];
    for(auto &cur : arr)
        ans = max(ans,cur);
    return ans;
}
template<typename T>
T min(const vector<T> arr){
    assert(!arr.empty());
    T ans = arr[0];
    for(auto &cur : arr)
        ans = min(ans,cur);
    return ans;
}
template<typename T>
T max(const set<T> s){
    assert(!s.empty());
    return *--s.end();
}
template<typename T>
T min(const set<T> s){
    assert(!s.empty());
    return *s.begin();
}
template<typename T, typename G>
vector<T> set_max(vector<T> &base, const vector<G> &comp){
    assert(base.size() == comp.size());
    for(int i = 0; i < (int)comp.size(); ++i)
        base[i] = max(base[i],comp[i]);
    return base;
}
vl arr;
ll n,x;
ll solve(ll k){
    ll ans = x*(k+n);
    ll rem = n;
    for(int i = 1; ;++i){
        ll take = min(k,rem);
        if(take == 0)
            break;
        ans += (arr[rem]-arr[rem-take])*(i==1?5:2*i+1);
        rem -= take;
        if(ans > INF)
            return INF;
    }
    //watch(k);
    //watch(ans);
    return ans;
}
ll _(){
    cin >> n >> x;
    arr.resize(n);
    cin >> arr;
    arr.insert(arr.begin(),0);
    for(int i = 1; i <= n; ++i)
        arr[i] += arr[i-1];
    ll ans = INF;
    for(int k = 1; k <= n; ++k)
        ans = min(ans,solve(k));
    return ans;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0);
    cout << fixed << setprecision(12);
    cout << _() << '\n';
}


Measured memory_bytes: 4864