from bisect import bisect_left

N = int(eval(input()))

A = sorted(list(map(int,input().split())))

B = sorted(list(map(int,input().split())))

C = sorted(list(map(int,input().split())))



"""

まず、前処理として、「Bの祭壇から大きさb以下のパーツを使うとき、Aの祭壇のパーツとの組み合わせはいくつあるか」というのを調べてメモしておく。

次に、Cの祭壇の大きさがcのとき、という風に場合わけして、選べるBの祭壇の大きさを絞って、A,B,Cの組み合わせの数を加算していく。

"""





tmpSum = 0

dicB = {}

for i in range(N):

    b = B[i]

    if b not in dicB:

        dicB[b] = tmpSum

    idx = bisect_left(A,b)

    dicB[b] += idx

    tmpSum += idx



ans = 0

for i in range(N):

    c = C[i]

    idx = bisect_left(B,c)

    if idx != 0:

        b = B[idx-1]

        ans += dicB[b]



print(ans)

from bisect import bisect

N = int(eval(input()))

A = sorted(list(map(int,input().split())))

B = sorted(list(map(int,input().split())))

C = sorted(list(map(int,input().split())))



"""

前処理で、中部の祭壇でBi以下のサイズを選べるときの、中段と上段のパーツの組み合わせのパターン数を計算しておく。

"""

BPattern = []

for i in range(N):

    b = B[i]

    idx = bisect(A,b-1)

    if i == 0:

        BPattern.append(idx)

    else:

        BPattern.append(BPattern[-1]+idx)



ans = 0

for i in range(N):

    c = C[i]

    idx = bisect(B,c-1)

    if idx:

        ans+=BPattern[idx-1]



print(ans)
from bisect import bisect_left

N = int(eval(input()))
A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))
C = sorted(list(map(int, input().split())))
"""
まず、前処理として、「Bの祭壇から大きさb以下のパーツを使うとき、Aの祭壇のパーツとの組み合わせはいくつあるか」というのを調べてメモしておく。
次に、Cの祭壇の大きさがcのとき、という風に場合わけして、選べるBの祭壇の大きさを絞って、A,B,Cの組み合わせの数を加算していく。
"""
tmpSum = 0
dicB = {}
for i in range(N):
    b = B[i]
    if b not in dicB:
        dicB[b] = tmpSum
    idx = bisect_left(A, b)
    dicB[b] += idx
    tmpSum += idx
ans = 0
for i in range(N):
    c = C[i]
    idx = bisect_left(B, c)
    if idx != 0:
        b = B[idx - 1]
        ans += dicB[b]
print(ans)

from bisect import bisect

N = int(eval(input()))
A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))
C = sorted(list(map(int, input().split())))
"""
前処理で、中部の祭壇でBi以下のサイズを選べるときの、中段と上段のパーツの組み合わせのパターン数を計算しておく。
"""
BPattern = []
for i in range(N):
    b = B[i]
    idx = bisect(A, b - 1)
    if i == 0:
        BPattern.append(idx)
    else:
        BPattern.append(BPattern[-1] + idx)
ans = 0
for i in range(N):
    c = C[i]
    idx = bisect(B, c - 1)
    if idx:
        ans += BPattern[idx - 1]
print(ans)

-from bisect import bisect_left +from bisect import bisect -まず、前処理として、「Bの祭壇から大きさb以下のパーツを使うとき、Aの祭壇のパーツとの組み合わせはいくつあるか」というのを調べてメモしておく。 -次に、Cの祭壇の大きさがcのとき、という風に場合わけして、選べるBの祭壇の大きさを絞って、A,B,Cの組み合わせの数を加算していく。 +前処理で、中部の祭壇でBi以下のサイズを選べるときの、中段と上段のパーツの組み合わせのパターン数を計算しておく。 -tmpSum = 0 -dicB = {} +BPattern = [] -    if b not in dicB: -        dicB[b] = tmpSum -    idx = bisect_left(A, b) -    dicB[b] += idx -    tmpSum += idx +    idx = bisect(A, b - 1) +    if i == 0: +        BPattern.append(idx) +    else: +        BPattern.append(BPattern[-1] + idx) -    idx = bisect_left(B, c) -    if idx != 0: -        b = B[idx - 1] -        ans += dicB[b] +    idx = bisect(B, c - 1) +    if idx: +        ans += BPattern[idx - 1]