/*
2018.04.04.1810
숫자 만들기
최대와 최소가 되는 것,
두 값의 차이를 계산
*/
#include <iostream>
#include <algorithm>
using namespace std;
int maxVal = -2123456789;
int minVal = 2123456789;
int ans;
int N;
int numArr[12];
int oper[4];
void problemIn() {
cin >> N;
for (int i = 0; i < 4; i++) {
cin >> oper[i];
}
for (int i = 0; i < N; i++) {
cin >> numArr[i];
}
}
void init() {
maxVal = -2123456789;
minVal = 2123456789;
}
void dfs(int depth, int a, int b, int c, int d, int sum) {
if (a == 0 && b==0 && c==0 && d==0) {
minVal = min(minVal, sum);
maxVal = max(maxVal, sum);
return;
}
if (a > 0) {
dfs(depth + 1, a - 1, b, c, d, sum + numArr[depth]);
}
if (b > 0) {
dfs(depth + 1, a, b - 1, c, d, sum - numArr[depth]);
}
if (c > 0) {
dfs(depth + 1, a, b, c - 1, d, sum * numArr[depth]);
}
if (d > 0) {
dfs(depth + 1, a, b, c, d - 1, sum / numArr[depth]);
}
}
void solve() {
dfs(1, oper[0], oper[1], oper[2], oper[3], numArr[0]);
ans = maxVal - minVal;
}
int main() {
int T;
cin >> T;
for (int tc = 1; tc <= T; tc++) {
problemIn();
solve();
cout << "#" << tc << " " << ans << endl;
init();
}
return 0;
}