#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class T, class S, class U> inline void DigitF_L( T n, int sz, S res[ ] , U b) {
int i;
for ( i= ( 0 ) ; i< ( sz) ; i++ ) {
res[ i] = n % b;
n / = b;
}
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int fg;
int answer[ 6 ] [ 6 ] [ 7 ] [ 7 ] ;
int dp[ 7 ] [ 7 ] [ 243 ] ;
int nx[ 7 ] [ 7 ] [ 243 ] ;
int pw[ 7 ] ;
void solve( void ) {
int x, y;
const int a = 6 ;
const int b = 6 ;
int pr[ 7 ] ;
int i;
int j;
int k;
int ni;
int nj;
int nc;
int m;
int nm;
int n1;
int n2;
fg = 1 ;
pw[ 0 ] = 1 ;
for ( i= ( 1 ) ; i< ( 7 ) ; i++ ) {
pw[ i] = 3 * pw[ i- 1 ] ;
}
for ( y= ( 1 ) ; y< ( 6 ) ; y++ ) {
int x;
for ( i= ( 0 ) ; i< ( a+ 1 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( b+ 1 ) ; j++ ) {
for ( k= ( 0 ) ; k< ( pw[ y] ) ; k++ ) {
dp[ i] [ j] [ k] = - 1073709056 ;
}
}
}
dp[ 0 ] [ 0 ] [ 0 ] = 0 ;
for ( x= ( 1 ) ; x< ( 6 ) ; x++ ) {
for ( m= ( 0 ) ; m< ( y) ; m++ ) {
for ( i= ( 0 ) ; i< ( a+ 1 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( b+ 1 ) ; j++ ) {
for ( k= ( 0 ) ; k< ( pw[ y] ) ; k++ ) {
nx[ i] [ j] [ k] = - 1073709056 ;
}
}
}
for ( i= ( 0 ) ; i< ( a+ 1 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( b+ 1 ) ; j++ ) {
for ( k= ( 0 ) ; k< ( pw[ y] ) ; k++ ) {
if ( dp[ i] [ j] [ k] > - 1073709056 ) {
int l;
DigitF_L( k,y,pr,3 ) ;
for ( l= ( 0 ) ; l< ( 3 ) ; l++ ) {
if ( l== 1 ) {
ni = i + 1 ;
}
else {
ni = i + 0 ;
}
if ( l== 2 ) {
nj = j + 1 ;
}
else {
nj = j + 0 ;
}
if ( ni > a || nj > b) {
continue ;
}
nm = ( k * 3 ) % pw[ y] + l;
nc = dp[ i] [ j] [ k] ;
n1 = n2 = 0 ;
if ( l) {
if ( m && pr[ 0 ] == 1 ) {
n1++ ;
}
if ( m && pr[ 0 ] == 2 ) {
n2++ ;
}
if ( pr[ y- 1 ] == 1 ) {
n1++ ;
}
if ( pr[ y- 1 ] == 2 ) {
n2++ ;
}
if ( l== 1 ) {
nc + = n1 * ( - 30 ) + n2 * 20 + ( n1 + n2) * ( - 30 ) ;
}
else {
nc + = n1 * ( - 30 ) + n2 * 20 + ( n1 + n2) * ( 20 ) ;
}
}
chmax( nx[ ni] [ nj] [ nm] , nc) ;
}
}
}
}
}
for ( i= ( 0 ) ; i< ( a+ 1 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( b+ 1 ) ; j++ ) {
for ( k= ( 0 ) ; k< ( pw[ y] ) ; k++ ) {
dp[ i] [ j] [ k] = nx[ i] [ j] [ k] ;
}
}
}
}
for ( i= ( 0 ) ; i< ( a+ 1 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( b+ 1 ) ; j++ ) {
for ( k= ( 0 ) ; k< ( pw[ y] ) ; k++ ) {
chmax( answer[ x] [ y] [ i] [ j] , dp[ i] [ j] [ k] + 120 * i + 40 * j) ;
}
}
}
}
}
for ( x= ( 1 ) ; x< ( 6 ) ; x++ ) {
for ( y= ( 1 ) ; y< ( 6 ) ; y++ ) {
for ( i= ( 0 ) ; i< ( a+ 1 ) ; i++ ) {
for ( j= ( 0 ) ; j< ( b+ 1 ) ; j++ ) {
if ( i) {
chmax( answer[ x] [ y] [ i] [ j] , answer[ x] [ y] [ i- 1 ] [ j] ) ;
}
if ( j) {
chmax( answer[ x] [ y] [ i] [ j] , answer[ x] [ y] [ i] [ j- 1 ] ) ;
}
}
}
}
}
}
class Solution{
public :
int getMaxGridHappiness( int x, int y, int a, int b) {
if ( ! fg) {
solve( ) ;
}
return answer[ x] [ y] [ a] [ b] ;
}
}
;
// cLay varsion 20201115-2
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int fg;
// int answer[6][6][7][7];
// int dp[7][7][243], nx[7][7][243], pw[7];
//
// void solve(void){
// const int a = 6, b = 6;
// int pr[7], i, j, k, ni, nj, nc, m, nm, n1, n2;
//
// fg = 1;
// pw[0] = 1;
// rep(i,1,7) pw[i] = 3 * pw[i-1];
//
// rep(y,1,6){
// rep(i,a+1) rep(j,b+1) rep(k,pw[y]) dp[i][j][k] = -int_inf;
// dp[0][0][0] = 0;
// rep(x,1,6){
// rep(m,y){
// rep(i,a+1) rep(j,b+1) rep(k,pw[y]) nx[i][j][k] = -int_inf;
// rep(i,a+1) rep(j,b+1) rep(k,pw[y]) if(dp[i][j][k] > -int_inf){
// DigitF(k,y,pr,3);
// rep(l,3){
// ni = i + if[l==1, 1, 0];
// nj = j + if[l==2, 1, 0];
// if(ni > a || nj > b) continue;
// nm = (k * 3) % pw[y] + l;
// nc = dp[i][j][k];
// n1 = n2 = 0;
// if(l){
// if(m && pr[0]==1) n1++;
// if(m && pr[0]==2) n2++;
// if(pr[y-1]==1) n1++;
// if(pr[y-1]==2) n2++;
// nc += n1 * (-30) + n2 * 20 + (n1 + n2) * (if[l==1, -30, 20]);
// }
// nx[ni][nj][nm] >?= nc;
// }
// }
// rep(i,a+1) rep(j,b+1) rep(k,pw[y]) dp[i][j][k] = nx[i][j][k];
// }
// rep(i,a+1) rep(j,b+1) rep(k,pw[y]) answer[x][y][i][j] >?= dp[i][j][k] + 120 * i + 40 * j;
// }
// }
//
// rep(x,1,6) rep(y,1,6) rep(i,a+1) rep(j,b+1){
// if(i) answer[x][y][i][j] >?= answer[x][y][i-1][j];
// if(j) answer[x][y][i][j] >?= answer[x][y][i][j-1];
// }
// }
//
// class Solution {
// public:
// int getMaxGridHappiness(int x, int y, int a, int b) {
// if(!fg) solve();
// return answer[x][y][a][b];
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFMsIGNsYXNzIFU+IGlubGluZSB2b2lkIERpZ2l0Rl9MKFQgbiwgaW50IHN6LCBTIHJlc1tdLCBVIGIpewogIGludCBpOwogIGZvcihpPSgwKTtpPChzeik7aSsrKXsKICAgIHJlc1tpXSA9IG4gJSBiOwogICAgbiAvPSBiOwogIH0KfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBjaG1heChTICZhLCBUIGIpewogIGlmKGE8Yil7CiAgICBhPWI7CiAgfQogIHJldHVybiBhOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KaW50IGZnOwppbnQgYW5zd2VyWzZdWzZdWzddWzddOwppbnQgZHBbN11bN11bMjQzXTsKaW50IG54WzddWzddWzI0M107CmludCBwd1s3XTsKdm9pZCBzb2x2ZSh2b2lkKXsKICBpbnQgeCwgeTsKICBjb25zdCBpbnQgYSA9IDY7CiAgY29uc3QgaW50IGIgPSA2OwogIGludCBwcls3XTsKICBpbnQgaTsKICBpbnQgajsKICBpbnQgazsKICBpbnQgbmk7CiAgaW50IG5qOwogIGludCBuYzsKICBpbnQgbTsKICBpbnQgbm07CiAgaW50IG4xOwogIGludCBuMjsKICBmZyA9IDE7CiAgcHdbMF0gPSAxOwogIGZvcihpPSgxKTtpPCg3KTtpKyspewogICAgcHdbaV0gPSAzICogcHdbaS0xXTsKICB9CiAgZm9yKHk9KDEpO3k8KDYpO3krKyl7CiAgICBpbnQgeDsKICAgIGZvcihpPSgwKTtpPChhKzEpO2krKyl7CiAgICAgIGZvcihqPSgwKTtqPChiKzEpO2orKyl7CiAgICAgICAgZm9yKGs9KDApO2s8KHB3W3ldKTtrKyspewogICAgICAgICAgZHBbaV1bal1ba10gPSAtMTA3MzcwOTA1NjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGRwWzBdWzBdWzBdID0gMDsKICAgIGZvcih4PSgxKTt4PCg2KTt4KyspewogICAgICBmb3IobT0oMCk7bTwoeSk7bSsrKXsKICAgICAgICBmb3IoaT0oMCk7aTwoYSsxKTtpKyspewogICAgICAgICAgZm9yKGo9KDApO2o8KGIrMSk7aisrKXsKICAgICAgICAgICAgZm9yKGs9KDApO2s8KHB3W3ldKTtrKyspewogICAgICAgICAgICAgIG54W2ldW2pdW2tdID0gLTEwNzM3MDkwNTY7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKGk9KDApO2k8KGErMSk7aSsrKXsKICAgICAgICAgIGZvcihqPSgwKTtqPChiKzEpO2orKyl7CiAgICAgICAgICAgIGZvcihrPSgwKTtrPChwd1t5XSk7aysrKXsKICAgICAgICAgICAgICBpZihkcFtpXVtqXVtrXSA+IC0xMDczNzA5MDU2KXsKICAgICAgICAgICAgICAgIGludCBsOwogICAgICAgICAgICAgICAgRGlnaXRGX0woayx5LHByLDMpOwogICAgICAgICAgICAgICAgZm9yKGw9KDApO2w8KDMpO2wrKyl7CiAgICAgICAgICAgICAgICAgIGlmKGw9PTEpewogICAgICAgICAgICAgICAgICAgIG5pID0gaSArMTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIG5pID0gaSArMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZihsPT0yKXsKICAgICAgICAgICAgICAgICAgICBuaiA9IGogKzE7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICBuaiA9IGogKzA7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYobmkgPiBhIHx8IG5qID4gYil7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgbm0gPSAoayAqIDMpICUgcHdbeV0gKyBsOwogICAgICAgICAgICAgICAgICBuYyA9IGRwW2ldW2pdW2tdOwogICAgICAgICAgICAgICAgICBuMSA9IG4yID0gMDsKICAgICAgICAgICAgICAgICAgaWYobCl7CiAgICAgICAgICAgICAgICAgICAgaWYobSAmJiBwclswXT09MSl7CiAgICAgICAgICAgICAgICAgICAgICBuMSsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihtICYmIHByWzBdPT0yKXsKICAgICAgICAgICAgICAgICAgICAgIG4yKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKHByW3ktMV09PTEpewogICAgICAgICAgICAgICAgICAgICAgbjErKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYocHJbeS0xXT09Mil7CiAgICAgICAgICAgICAgICAgICAgICBuMisrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihsPT0xKXsKICAgICAgICAgICAgICAgICAgICAgIG5jICs9IG4xICogKC0zMCkgKyBuMiAqIDIwICsgKG4xICsgbjIpICogKC0zMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICBuYyArPSBuMSAqICgtMzApICsgbjIgKiAyMCArIChuMSArIG4yKSAqICgyMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNobWF4KG54W25pXVtual1bbm1dLCBuYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcihpPSgwKTtpPChhKzEpO2krKyl7CiAgICAgICAgICBmb3Ioaj0oMCk7ajwoYisxKTtqKyspewogICAgICAgICAgICBmb3Ioaz0oMCk7azwocHdbeV0pO2srKyl7CiAgICAgICAgICAgICAgZHBbaV1bal1ba10gPSBueFtpXVtqXVtrXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IoaT0oMCk7aTwoYSsxKTtpKyspewogICAgICAgIGZvcihqPSgwKTtqPChiKzEpO2orKyl7CiAgICAgICAgICBmb3Ioaz0oMCk7azwocHdbeV0pO2srKyl7CiAgICAgICAgICAgIGNobWF4KGFuc3dlclt4XVt5XVtpXVtqXSwgZHBbaV1bal1ba10gKyAxMjAgKiBpICsgNDAgKiBqKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgZm9yKHg9KDEpO3g8KDYpO3grKyl7CiAgICBmb3IoeT0oMSk7eTwoNik7eSsrKXsKICAgICAgZm9yKGk9KDApO2k8KGErMSk7aSsrKXsKICAgICAgICBmb3Ioaj0oMCk7ajwoYisxKTtqKyspewogICAgICAgICAgaWYoaSl7CiAgICAgICAgICAgIGNobWF4KGFuc3dlclt4XVt5XVtpXVtqXSwgYW5zd2VyW3hdW3ldW2ktMV1bal0pOwogICAgICAgICAgfQogICAgICAgICAgaWYoail7CiAgICAgICAgICAgIGNobWF4KGFuc3dlclt4XVt5XVtpXVtqXSwgYW5zd2VyW3hdW3ldW2ldW2otMV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IGdldE1heEdyaWRIYXBwaW5lc3MoaW50IHgsIGludCB5LCBpbnQgYSwgaW50IGIpewogICAgaWYoIWZnKXsKICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiBhbnN3ZXJbeF1beV1bYV1bYl07CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAxMTE1LTIKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gaW50IGZnOwovLyBpbnQgYW5zd2VyWzZdWzZdWzddWzddOwovLyBpbnQgZHBbN11bN11bMjQzXSwgbnhbN11bN11bMjQzXSwgcHdbN107Ci8vIAovLyB2b2lkIHNvbHZlKHZvaWQpewovLyAgIGNvbnN0IGludCBhID0gNiwgYiA9IDY7Ci8vICAgaW50IHByWzddLCBpLCBqLCBrLCBuaSwgbmosIG5jLCBtLCBubSwgbjEsIG4yOwovLyAKLy8gICBmZyA9IDE7Ci8vICAgcHdbMF0gPSAxOwovLyAgIHJlcChpLDEsNykgcHdbaV0gPSAzICogcHdbaS0xXTsKLy8gCi8vICAgcmVwKHksMSw2KXsKLy8gICAgIHJlcChpLGErMSkgcmVwKGosYisxKSByZXAoayxwd1t5XSkgZHBbaV1bal1ba10gPSAtaW50X2luZjsKLy8gICAgIGRwWzBdWzBdWzBdID0gMDsKLy8gICAgIHJlcCh4LDEsNil7Ci8vICAgICAgIHJlcChtLHkpewovLyAgICAgICAgIHJlcChpLGErMSkgcmVwKGosYisxKSByZXAoayxwd1t5XSkgbnhbaV1bal1ba10gPSAtaW50X2luZjsKLy8gICAgICAgICByZXAoaSxhKzEpIHJlcChqLGIrMSkgcmVwKGsscHdbeV0pIGlmKGRwW2ldW2pdW2tdID4gLWludF9pbmYpewovLyAgICAgICAgICAgRGlnaXRGKGsseSxwciwzKTsKLy8gICAgICAgICAgIHJlcChsLDMpewovLyAgICAgICAgICAgICBuaSA9IGkgKyBpZltsPT0xLCAxLCAwXTsKLy8gICAgICAgICAgICAgbmogPSBqICsgaWZbbD09MiwgMSwgMF07Ci8vICAgICAgICAgICAgIGlmKG5pID4gYSB8fCBuaiA+IGIpIGNvbnRpbnVlOwovLyAgICAgICAgICAgICBubSA9IChrICogMykgJSBwd1t5XSArIGw7Ci8vICAgICAgICAgICAgIG5jID0gZHBbaV1bal1ba107Ci8vICAgICAgICAgICAgIG4xID0gbjIgPSAwOwovLyAgICAgICAgICAgICBpZihsKXsKLy8gICAgICAgICAgICAgICBpZihtICYmIHByWzBdPT0xKSBuMSsrOwovLyAgICAgICAgICAgICAgIGlmKG0gJiYgcHJbMF09PTIpIG4yKys7Ci8vICAgICAgICAgICAgICAgaWYocHJbeS0xXT09MSkgbjErKzsKLy8gICAgICAgICAgICAgICBpZihwclt5LTFdPT0yKSBuMisrOwovLyAgICAgICAgICAgICAgIG5jICs9IG4xICogKC0zMCkgKyBuMiAqIDIwICsgKG4xICsgbjIpICogKGlmW2w9PTEsIC0zMCwgMjBdKTsKLy8gICAgICAgICAgICAgfQovLyAgICAgICAgICAgICBueFtuaV1bbmpdW25tXSA+Pz0gbmM7Ci8vICAgICAgICAgICB9Ci8vICAgICAgICAgfQovLyAgICAgICAgIHJlcChpLGErMSkgcmVwKGosYisxKSByZXAoayxwd1t5XSkgZHBbaV1bal1ba10gPSBueFtpXVtqXVtrXTsKLy8gICAgICAgfQovLyAgICAgICByZXAoaSxhKzEpIHJlcChqLGIrMSkgcmVwKGsscHdbeV0pIGFuc3dlclt4XVt5XVtpXVtqXSA+Pz0gZHBbaV1bal1ba10gKyAxMjAgKiBpICsgNDAgKiBqOwovLyAgICAgfQovLyAgIH0KLy8gCi8vICAgcmVwKHgsMSw2KSByZXAoeSwxLDYpIHJlcChpLGErMSkgcmVwKGosYisxKXsKLy8gICAgIGlmKGkpIGFuc3dlclt4XVt5XVtpXVtqXSA+Pz0gYW5zd2VyW3hdW3ldW2ktMV1bal07Ci8vICAgICBpZihqKSBhbnN3ZXJbeF1beV1baV1bal0gPj89IGFuc3dlclt4XVt5XVtpXVtqLTFdOwovLyAgIH0KLy8gfQovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IGdldE1heEdyaWRIYXBwaW5lc3MoaW50IHgsIGludCB5LCBpbnQgYSwgaW50IGIpIHsKLy8gICAgIGlmKCFmZykgc29sdmUoKTsKLy8gICAgIHJldHVybiBhbnN3ZXJbeF1beV1bYV1bYl07Ci8vICAgfQovLyB9Owo=