Problem:
Score : 500 points

Problem Statement

On an xy plane, in an area satisfying 0 ≤ x ≤ W, 0 ≤ y ≤ H, there is one house at each and every point where both x and y are integers.

There are unpaved roads between every pair of points for which either the x coordinates are equal and the difference between the y coordinates is 1, or the y coordinates are equal and the difference between the x coordinates is 1.

The cost of paving a road between houses on coordinates (i,j) and (i+1,j) is p_i for any value of j, while the cost of paving a road between houses on coordinates (i,j) and (i,j+1) is q_j for any value of i.

Mr. Takahashi wants to pave some of these roads and be able to travel between any two houses on paved roads only. Find the solution with the minimum total cost.

Constraints

1 ≦ W,H ≦ 10^5

1 ≦ p_i ≦ 10^8(0 ≦ i ≦ W-1)

1 ≦ q_j ≦ 10^8(0 ≦ j ≦ H-1)

p_i (0 ≦ i ≦ W−1) is an integer.

q_j (0 ≦ j ≦ H−1) is an integer.

Input

Inputs are provided from Standard Input in the following form.

W H
p_0
:
p_{W-1}
q_0
:
q_{H-1}

Output

Output an integer representing the minimum total cost.

Sample Input 1

2 2
3
5
2
7

Sample Output 1

29

It is enough to pave the following eight roads.

Road connecting houses at (0,0) and (0,1)

Road connecting houses at (0,1) and (1,1)

Road connecting houses at (0,2) and (1,2)

Road connecting houses at (1,0) and (1,1)

Road connecting houses at (1,0) and (2,0)

Road connecting houses at (1,1) and (1,2)

Road connecting houses at (1,2) and (2,2)

Road connecting houses at (2,0) and (2,1)

Sample Input 2

4 3
2
4
8
1
2
9
3

Sample Output 2

60

Solution in Haskell (GHC 7.10.3) (judge verdict: Accepted)

--lemma:n頂点n-1辺で閉路を持たないならば木である。
--proof:n=1の時、明らか。
--      n=kまでの題意を仮定する。辺を１つ削除すると、
--      閉路を持たないので真に頂点の少ない木が２つ出来、仮定よりこれらは木。
--      削除辺を復活させるとこれもまた木である。
--
--したがって、n頂点重み付きグラフの最小全域木は、閉路を構成しないn-1個の辺の選択の内、最小の選びかたをすればよい。
--次の貪欲法を考える：
--Kruskal:n頂点重み付きグラフに対して、最小重み辺を選択する。「既に選択した辺とで閉路をなさない」限りで小さい重みをもつ辺を順次n-1個選択する。
--theorem:Kruskalは最小全域木の１つを構成する。
--proof:最小全域木は必ず存在するのでこれをS、Kruskalで構成される全域木をKとし、この重みはSより大きいと仮定する。
--      S,Kの辺を重みでソートする。Kの並びは各々その構成時のものに一致させられる。この並びで最初に重みが食い違うS,Kの辺をe_s,e_kとする。
--      Kの構成法から、w(e_s)>=w(e_k)である。重みは異なるとしたのでw(e_s)>w(e_k)でなければならない。
--      しかしSにおいてe_kとe_sを入れ替えたものをS'とすると、
--      S'は全域木であり、かつw(S')<w(S)で最小性に反する。したがって、Kの重みはSに一致し、Kruskalは最小全域木の１つを構成する。

--問題の場合、(W+1)*(H+1)格子グラフ上で、辺をソートし、Kruskalにしたがって、閉路を回避しつつ選択できる辺の重み総和を計算すればよい。
--最初の最小重み辺p_iH+1個(として一般性を失わない)は確実に選択できる。次の重み辺からは閉路を回避する必要があり、その条件は
--p_k重み辺H+1個から選択する場合：特に条件なし。
--q_jW+1個から選択する場合：(i,j)-(i+1,j),(i,j+1)-(i+1,j+1)が既にあるのでこれに接続する二辺はどちらか一方のみしか選択できない。
--となる。ところが以上の条件に該当する辺の数は、
--(i,j)-(i+1,j),(i,j+1)-(i+1,j+1)を縮約したW*(H+1)格子グラフ上での、
--p_k重み辺H+1個
--q_j重み辺W個((i,j)-(i,j+1),(i+1,j)-(i+1,j+1)は同一視される)
--に一致する。((W+1)*(H+1)->W*(H+1)格子グラフ準同型が存在する)。つまり問題を変形した上で、まっさらなところから選び直せる。
--したがってこの問題は次の再帰構造をもつ：
--solver(W,H,[p],[q])=let x = min[p,q] in if x==p_i then (H+1)*x+solver(W-1,H,[p]\p_i,[q])
--                                   else if x==q_j then (W+1)*x+solver(W,H-1,[p],[q]\q_j)
--solver(0,0,[][])=0

import Text.Regex
import GHC.Exts

data PQ = P | Q deriving (Eq,Show)

main::IO()
main =do
  wh<-getLine
  let w:h:[]=map read (words wh)::[Int]
  ps<-get_n w
  qs<-get_n h
  let pp= map (\x->(P,x)) ps
  let qq= map (\x->(Q,x)) qs
  let pq= sortWith (\(_,x)->x) (pp++qq)
  print (solver w h pq)

get_n::Int -> IO [Int]
get_n 0 = return []
get_n n = do
          c<-getLine
          let m = read c ::Int
          rest<- (get_n (n-1))
          return (m:rest)

solver::Int -> Int -> [(PQ,Int)] -> Int
solver 0 0 [] = 0
solver w h ((P,p_i):rest) = ((h+1)*p_i)+(solver (w-1) h rest)
solver w h ((Q,q_j):rest) = ((w+1)*q_j)+(solver w (h-1) rest)