Problem:
Score : 500 points

Problem Statement

Let N be a positive integer.

There is a numerical sequence of length 3N, a = (a_1, a_2, ..., a_{3N}).
Snuke is constructing a new sequence of length 2N, a', by removing exactly N elements from a without changing the order of the remaining elements.
Here, the score of a' is defined as follows: (the sum of the elements in the first half of a') - (the sum of the elements in the second half of a').

Find the maximum possible score of a'.

Constraints

1 ≤ N ≤ 10^5

a_i is an integer.

1 ≤ a_i ≤ 10^9

Partial Score

In the test set worth 300 points, N ≤ 1000.

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_{3N}

Output

Print the maximum possible score of a'.

Sample Input 1

2
3 1 4 1 5 9

Sample Output 1

1

When a_2 and a_6 are removed, a' will be (3, 4, 1, 5), which has a score of (3 + 4) - (1 + 5) = 1.

Sample Input 2

1
1 2 3

Sample Output 2

-1

For example, when a_1 are removed, a' will be (2, 3), which has a score of 2 - 3 = -1.

Sample Input 3

3
8 2 2 7 4 6 5 3 8

Sample Output 3

5

For example, when a_2, a_3 and a_9 are removed, a' will be (8, 7, 4, 6, 5, 3), which has a score of (8 + 7 + 4) - (6 + 5 + 3) = 5.

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

N = gets.chop.to_i
A = gets.chop.split.map(&:to_i)

def former_array(a, half)
  a[0..(half - 1)]
end

def latter_array(a, half)
  a[half..-1]
end

def former_min_index(a)
  half = (a.size.to_f/2).ceil
  a1 = former_array(a, half)
  p half,a1
  a1.index(a1.min)
end

def latter_max_index(a)
  half = (a.size.to_f/2).floor
  a2 = latter_array(a, half)
  p half,a2
  a2.index(a2.max) + half
end

def score(a)
  sum = 0
  half_size = a.size / 2
  a.each_with_index do |v, i|
    if i < half_size
      sum += v
    else
      sum -= v
    end
  end
  sum
end

def select_max_score_array(a, ais_array)
  p a, ais_array
  map = ais_array.map do |ais|
          a0 = a.dup
          ais.each do |ai|
            a0.delete_at(ai)
          end
          {a: a0, score: score(a0)}
        end
  p map
  max = -1
  max_array = []
  map.each do |o|
    if o[:score] > max
      max = o[:score]
      max_array = [o[:a]]
    elsif o[:score] == max
      max_array << o[:a]
    end
  end
  max_array
end

@candidates = []

def cut(a)
  size = a.size
  if a.size == N * 2
    @candidates << score(a)
    return
  end
  ceil_half_size = (a.size.to_f/2).ceil
  floor_half_size = (a.size.to_f/2).floor

  if (a.size - 1) % 2 == 0
    # 1個抜きの2パターンのうちスコアが高い方を選択
    a1i = former_min_index(a)
    a2i = latter_max_index(a)
    next_a = select_max_score_array(a, [[a1i], [a2i]])
    next_a.each do |i|
      cut(i)
    end
  else
    # 2個抜きの4パターンのうちスコアが高いものを選択
    a1i = former_min_index(a)
    a01 = a.dup
    a01.delete_at(a1i)
    a11i = former_min_index(a01)
    a12i = latter_max_index(a01)
    a2i = latter_max_index(a)
    a02 = a.dup
    a02.delete_at(a2i)
    a21i = former_min_index(a02)
    a22i = latter_max_index(a02)
    next_a = select_max_score_array(a, [[a1i, a11i], [a1i, a12i], [a2i, a21i], [a2i, a22i]])
    next_a.each do |i|
      cut(i)
    end
  end
end

cut(A)
puts @candidates.max