package main
import (
"fmt"
"os"
"sort"
)
type Player struct {
num int
pos int
}
func main() {
var g, d, f int
if _, err := fmt.Fscan(os.Stdin, &g, &d, &f); err != nil {
return
}
n := g + d + f
players := make([]Player, 0, n)
for i := 0; i < g; i++ {
var num int
fmt.Fscan(os.Stdin, &num)
players = append(players, Player{num, 0})
}
for i := 0; i < d; i++ {
var num int
fmt.Fscan(os.Stdin, &num)
players = append(players, Player{num, 1})
}
for i := 0; i < f; i++ {
var num int
fmt.Fscan(os.Stdin, &num)
players = append(players, Player{num, 2})
}
sort.Slice(players, func(i, j int) bool {
return players[i].num < players[j].num
})
var ans int64 = 0
cg, cd, cf := int64(0), int64(0), int64(0)
j := 0
for i := 0; i < n; i++ {
for j < n && players[j].num <= 2*players[i].num {
if players[j].pos == 0 {
cg++
} else if players[j].pos == 1 {
cd++
} else {
cf++
}
j++
}
if players[i].pos == 0 {
cg--
} else if players[i].pos == 1 {
cd--
} else {
cf--
}
if players[i].pos == 0 {
ans += (cd * (cd - 1) / 2) * (cf * (cf - 1) * (cf - 2) / 6)
} else if players[i].pos == 1 {
ans += cg * cd * (cf * (cf - 1) * (cf - 2) / 6)
} else {
ans += cg * (cd * (cd - 1) / 2) * (cf * (cf - 1) / 2)
}
}
fmt.Println(ans)
}