#include<cstdio>
#include<queue>
#include<algorithm>
#include<iostream>
#define int long long
using namespace std;
int n,m,t,s[1000009],dp[1000009],cnt[1000009],maxt,as,bs,cs;
inline int k(int i){
return -2ll*as*s[i];
}
inline int b(int i){
return dp[i]+s[i]*s[i]*as+cs-bs*s[i];
}
inline int x(int i){
return s[i];
}
inline int dp_add(int i){
return as*s[i]*s[i]+bs*s[i];
}
inline bool cmpadd(int l1,int l2,int l3){
return abs(b(l1)-b(l2))*abs(k(l2)-k(l3))>=abs(b(l2)-b(l3))*abs(k(l1)-k(l2));
}
inline bool cmpkill(int l1,int l2,int kill_time){
return abs(b(l2)-b(l1))<=kill_time*abs(k(l2)-k(l1));
}
signed main(){
int tp;
scanf("%lld",&tp);
while(tp--){
scanf("%lld%lld%lld%lld",&n,&as,&bs,&cs);
for(int i=1;i<=n;i++){
scanf("%lld",&cnt[i]);
s[i]=s[i-1]+cnt[i];
}
deque<int>q;
dp[0]=0;
for(int i=1;i<=n;i++){
if(!(q.size()>0&&k(q.back())==k(i-1)&&b(q.back())>=b(i-1))){
if((q.size()>0&&k(q.back())==k(i-1)))q.pop_back();
while(q.size()>=2){
int a=q.back();
q.pop_back();
int b=q.back();
if(!cmpadd(b,a,i-1)){
q.push_back(a);
break;
}
}
q.push_back(i-1);
}
while(q.size()>=2){
int a=q.front();
q.pop_front();
int b=q.front();
if(!cmpkill(a,b,x(i))){
q.push_front(a);
break;
}
}
int a=q.front();
dp[i]=k(a)*x(i)+b(a)+dp_add(i);
}
cout<<dp[n]<<endl;
}
return 0;
}