import java.util.Scanner;
public class Main {
private static int max = 0;
private static int[] nums = new int[24];
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
solution(in);
}
}
/**
* 模拟法: 3轴旋转(xyz)
* @param in
*/
private static void solution(Scanner in){
max = 0;
nums = new int[24];
for(int i=0; i<24; i++){
nums[i] = in.nextInt();
}
// init magic cube
int[][] matrix = new int[9][7];
matrix[1][3] = 0;
matrix[1][4] = 1;
matrix[2][3] = 2;
matrix[2][4] = 3;
matrix[3][1] = 4;
matrix[3][2] = 5;
matrix[3][3] = 6;
matrix[3][4] = 7;
matrix[3][5] = 8;
matrix[3][6] = 9;
matrix[4][1] = 10;
matrix[4][2] = 11;
matrix[4][3] = 12;
matrix[4][4] = 13;
matrix[4][5] = 14;
matrix[4][6] = 15;
matrix[5][3] = 16;
matrix[5][4] = 17;
matrix[6][3] = 18;
matrix[6][4] = 19;
matrix[7][3] = 20;
matrix[7][4] = 21;
matrix[8][3] = 22;
matrix[8][4] = 23;
operate(0, matrix);
System.out.println(max);
}
/**
* 递归
* @param opTimes
* @param matrix
*/
private static void operate(int opTimes, int[][] matrix){
if(opTimes <= 5){
max = Math.max(max, beauty(matrix));
}else{
return;
}
// 1-xy平面(绕z轴旋转) 2-yz平面(绕x轴旋转) 3-xz平面(绕y轴旋转)
for(int i=1; i<=3; i++){
// 1-左右旋转(xy平面,绕z轴旋转)
if(i == 1){
// 0-向左旋转 1-向右旋转
for(int j=0; j<=1; j++){
rotate(i, j, matrix);
operate(opTimes+1, matrix);
rotate(i, (j+1)%2, matrix);
}
}
// 2-上下旋转(yz平面,绕x轴旋转)
if(i == 2){
// 0-向上旋转 1-向下旋转
for(int j=0; j<=1; j++){
rotate(i, j, matrix);
operate(opTimes+1, matrix);
rotate(i, (j+1)%2, matrix);
}
}
// 3-顺逆旋转(xz平面,绕y轴旋转)
if(i == 3){
// 0-顺时针旋转 1-逆时针旋转
for(int j=0; j<=1; j++){
rotate(i, j, matrix);
operate(opTimes+1, matrix);
rotate(i, (j+1)%2, matrix);
}
}
}
}
/**
* 旋转: 以序号6 7 12 13所在平面为基准
* @param i
* @param j
* @param matrix
*/
private static void rotate(int i, int j, int[][] matrix){
// 1-左右旋转(xy平面,绕z轴旋转)
if(i == 1){
zRotate(j, matrix);
}
// 2-上下旋转(yz平面,绕x轴旋转)
if(i == 2){
xRotate(j, matrix);
}
// 3-顺逆旋转(xz平面,绕y轴旋转)
if(i == 3){
yRotate(j, matrix);
}
}
/**
* 上下旋转(yz平面,绕x轴旋转)
* 左列向上旋转 等价于 右列向下旋转, 右列可不管
* @param j
* @param matrix
*/
private static void xRotate(int j, int[][] matrix){
// 左列(序号6 12所在yz平面) 向上旋转
if(j == 0){
int tmp1 = matrix[1][3];
int tmp2 = matrix[2][3];
matrix[1][3] = matrix[3][3];
matrix[2][3] = matrix[4][3];
matrix[3][3] = matrix[5][3];
matrix[4][3] = matrix[6][3];
matrix[5][3] = matrix[7][3];
matrix[6][3] = matrix[8][3];
matrix[7][3] = tmp1;
matrix[8][3] = tmp2;
// 面(序号4 5 10 11平面) 旋转
int tmp3 = matrix[3][1];
matrix[3][1] = matrix[3][2];
matrix[3][2] = matrix[4][2];
matrix[4][2] = matrix[4][1];
matrix[4][1] = tmp3;
}
// 左列(序号6 12所在yz平面) 向下旋转
if(j == 1){
int tmp1 = matrix[8][3];
int tmp2 = matrix[7][3];
matrix[8][3] = matrix[6][3];
matrix[7][3] = matrix[5][3];
matrix[6][3] = matrix[4][3];
matrix[5][3] = matrix[3][3];
matrix[4][3] = matrix[2][3];
matrix[3][3] = matrix[1][3];
matrix[2][3] = tmp1;
matrix[1][3] = tmp2;
// 面(序号4 5 10 11平面) 旋转
int tmp3 = matrix[3][1];
matrix[3][1] = matrix[4][1];
matrix[4][1] = matrix[4][2];
matrix[4][2] = matrix[3][2];
matrix[3][2] = tmp3;
}
}
/**
* 顺逆旋转(xz平面,绕y轴旋转)
* @param j
* @param matrix
*/
private static void yRotate(int j, int[][] matrix){
// (序号6 7 12 13所在xz平面) 顺时针旋转
if(j == 0){
int tmp1 = matrix[2][3];
int tmp2 = matrix[2][4];
matrix[2][3] = matrix[4][2];
matrix[2][4] = matrix[3][2];
matrix[4][2] = matrix[5][4];
matrix[3][2] = matrix[5][3];
matrix[5][4] = matrix[3][5];
matrix[5][3] = matrix[4][5];
matrix[3][5] = tmp1;
matrix[4][5] = tmp2;
// 面 旋转
int tmp3 = matrix[3][3];
matrix[3][3] = matrix[4][3];
matrix[4][3] = matrix[4][4];
matrix[4][4] = matrix[3][4];
matrix[3][4] = tmp3;
}
// (序号6 7 12 13所在xz平面) 逆时针旋转
if(j == 1){
int tmp1 = matrix[2][3];
int tmp2 = matrix[2][4];
matrix[2][3] = matrix[3][5];
matrix[2][4] = matrix[4][5];
matrix[3][5] = matrix[5][4];
matrix[4][5] = matrix[5][3];
matrix[5][4] = matrix[4][2];
matrix[5][3] = matrix[3][2];
matrix[4][2] = tmp1;
matrix[3][2] = tmp2;
// 面 旋转
int tmp3 = matrix[3][3];
matrix[3][3] = matrix[3][4];
matrix[3][4] = matrix[4][4];
matrix[4][4] = matrix[4][3];
matrix[4][3] = tmp3;
}
}
/**
* 左右旋转(xy平面,绕z轴旋转)
* 上行向左旋转 等价于 下行向右旋转, 下行可不管
* @param j
* @param matrix
*/
private static void zRotate(int j, int[][] matrix){
// 上行(序号6 7所在xy平面) 向左旋转
if(j == 0){
// 行 旋转
int tmp1 = matrix[3][1];
int tmp2 = matrix[3][2];
matrix[3][1] = matrix[3][3];
matrix[3][2] = matrix[3][4];
matrix[3][3] = matrix[3][5];
matrix[3][4] = matrix[3][6];
matrix[3][5] = matrix[8][4];
matrix[3][6] = matrix[8][3];
matrix[8][4] = tmp1;
matrix[8][3] = tmp2;
// 面(序号0 1 2 3平面) 旋转
int tmp3 = matrix[1][3];
matrix[1][3] = matrix[2][3];
matrix[2][3] = matrix[2][4];
matrix[2][4] = matrix[1][4];
matrix[1][4] = tmp3;
}
// 上行(序号6 7所在xy平面) 向右旋转
if(j == 1){
int tmp1 = matrix[3][6];
int tmp2 = matrix[3][5];
matrix[3][6] = matrix[3][4];
matrix[3][5] = matrix[3][3];
matrix[3][4] = matrix[3][2];
matrix[3][3] = matrix[3][1];
matrix[3][2] = matrix[8][3];
matrix[3][1] = matrix[8][4];
matrix[8][3] = tmp1;
matrix[8][4] = tmp2;
// 面(序号0 1 2 3平面) 旋转
int tmp3 = matrix[1][3];
matrix[1][3] = matrix[1][4];
matrix[1][4] = matrix[2][4];
matrix[2][4] = matrix[2][3];
matrix[2][3] = tmp3;
}
}
private static int beauty(int[][] matrix){
int beauty1 = nums[matrix[1][3]] * nums[matrix[1][4]] * nums[matrix[2][3]] * nums[matrix[2][4]];
int beauty2 = nums[matrix[3][1]] * nums[matrix[3][2]] * nums[matrix[4][1]] * nums[matrix[4][2]];
int beauty3 = nums[matrix[3][3]] * nums[matrix[3][4]] * nums[matrix[4][3]] * nums[matrix[4][4]];
int beauty4 = nums[matrix[3][5]] * nums[matrix[3][6]] * nums[matrix[4][5]] * nums[matrix[4][6]];
int beauty5 = nums[matrix[5][3]] * nums[matrix[5][4]] * nums[matrix[6][3]] * nums[matrix[6][4]];
int beauty6 = nums[matrix[7][3]] * nums[matrix[7][4]] * nums[matrix[8][3]] * nums[matrix[8][4]];
return beauty1+beauty2+beauty3+beauty4+beauty5+beauty6;
}
}