import java.util.*; import java.util.stream.IntStream; class Solution { public static void main( String[] args ) { // read values with in.next...() methods var prices = new Scanner( System.in ).tokens() .mapToInt( Integer::valueOf ) .toArray(); // code your solution here var maxSum = IntStream.range( 2, prices.length - 1 ) .map( sellIndex -> { var firstRange = Arrays.copyOfRange( prices, 0, sellIndex ); var secondRange = Arrays.copyOfRange( prices, sellIndex - 1, prices.length ); return maxProfit( firstRange ) + maxProfit( secondRange ); }) .max().orElse( 0 ); // Write result with System.out.println() System.out.println( maxSum ); } private static int maxProfit( int[] prices ){ return IntStream.range( 0, prices.length ) .map( index -> { var range = Arrays.copyOfRange( prices, index, prices.length ); var max = IntStream.of( range ).max().orElse( 0 ); // difference between current price and future maximum return max - prices[index]; }) .max().orElse( 0 ); } }