#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int inf=1<<30; const ll INF=1LL<<62; typedef pair P; typedef pair PP; const ll MOD=998244353; struct pair_hash { template std::size_t operator() (const std::pair &pair) const { return std::hash()(pair.first) ^ std::hash()(pair.second); } }; int main(){ int N; cin>>N; vector> A(N,vector(3)); for(int i=0;i>A[i][j]; } } vector>> dp(N+1,vector>(3,{{0,0}}));//dp[i][p][x]=i番目のモンスターを倒すとき.直前にp種類目のカードを選んだ for(int i=0;i0 && j==k) continue; for(auto [attack,score]:dp[i][j]){ ll c=max(attack+A[i][k]-1,0LL); ll v=attack+A[i][k]; dp[i+1][k][c]=max(dp[i+1][k][c],score+v); } } } } ll ans=0; for(int i=0;i<3;i++){//最後に選んだのがi for(auto [p,v]:dp[N][i]){ ans=max(ans,v); } } cout<