← Home
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)
}