def div(n, d):

    cnt = 0

    while n % d == 0 and cnt < 18:

        n //= d

        cnt += 1

    return cnt





n = int(eval(input()))

dp = [[0]*19 for _ in range(19)]

#dp[i][j] -> 2の素因数がi以上,5の素因数がj以上の数字の数



ans = 0

for _ in range(n):

    x = round(float(eval(input())) * pow(10, 9))

    two = div(x, 2)

    five = div(x, 5)

    ans += dp[18 - two][18 - five]

    for i in range(two + 1):

        for j in range(five + 1):

            dp[i][j] += 1



print(ans)

"""

小数の状態だと処理しづらいので、与えられた数を全て10**9倍して小数を確実になくした上で

問題文を下記のように言い換える。

「積が10**18の倍数になるような数の組み合わせの数がいくつあるか」

数Aiがあり、Aiの2の素因数の数がn, 5の素因数の数がmのとき、

数Ai自体ですでにmin(n,m)個の0の数を持っている。この場合、のこり必要な0の数はx = 18-min(n,m)個である。

ここで、n == mの場合：

Aiの相方は少なくとも2,5の素因数をそれぞれx個以上持っていなくてはならない。

n > mの場合：

Aiの相方は少なくとも2の素因数をx-(n-m)個、5の素因数をx個持っていなくてはいけない。



m > nの場合：

Aiの相方は少なくとも2の素因数をx個以上、5の素因数をx-(m-n)個以上持っていなくてはならない。

"""

N = int(eval(input()))

dp = [[0]*(19) for _ in range(19)]

ans = 0

for _ in range(N):

    a = round(float(eval(input()))*pow(10,9))

    two = 0

    while a % 2 == 0 and two < 18:

        a //= 2

        two += 1

    five = 0

    while a % 5 == 0 and five < 18:

        a //= 5

        five += 1



    ans += dp[18-two][18-five]

    for i in range(two+1):

        for j in range(five+1):

            dp[i][j] += 1

print(ans)
def div(n, d):
    cnt = 0
    while n % d == 0 and cnt < 18:
        n //= d
        cnt += 1
    return cnt


n = int(eval(input()))
dp = [[0] * 19 for _ in range(19)]
# dp[i][j] -> 2の素因数がi以上,5の素因数がj以上の数字の数
ans = 0
for _ in range(n):
    x = round(float(eval(input())) * pow(10, 9))
    two = div(x, 2)
    five = div(x, 5)
    ans += dp[18 - two][18 - five]
    for i in range(two + 1):
        for j in range(five + 1):
            dp[i][j] += 1
print(ans)

"""
小数の状態だと処理しづらいので、与えられた数を全て10**9倍して小数を確実になくした上で
問題文を下記のように言い換える。
「積が10**18の倍数になるような数の組み合わせの数がいくつあるか」
数Aiがあり、Aiの2の素因数の数がn, 5の素因数の数がmのとき、
数Ai自体ですでにmin(n,m)個の0の数を持っている。この場合、のこり必要な0の数はx = 18-min(n,m)個である。
ここで、n == mの場合：
Aiの相方は少なくとも2,5の素因数をそれぞれx個以上持っていなくてはならない。
n > mの場合：
Aiの相方は少なくとも2の素因数をx-(n-m)個、5の素因数をx個持っていなくてはいけない。
m > nの場合：
Aiの相方は少なくとも2の素因数をx個以上、5の素因数をx-(m-n)個以上持っていなくてはならない。
"""
N = int(eval(input()))
dp = [[0] * (19) for _ in range(19)]
ans = 0
for _ in range(N):
    a = round(float(eval(input())) * pow(10, 9))
    two = 0
    while a % 2 == 0 and two < 18:
        a //= 2
        two += 1
    five = 0
    while a % 5 == 0 and five < 18:
        a //= 5
        five += 1
    ans += dp[18 - two][18 - five]
    for i in range(two + 1):
        for j in range(five + 1):
            dp[i][j] += 1
print(ans)

-def div(n, d): -    cnt = 0 -    while n % d == 0 and cnt < 18: -        n //= d -        cnt += 1 -    return cnt - - -n = int(eval(input())) -dp = [[0] * 19 for _ in range(19)] -# dp[i][j] -> 2の素因数がi以上,5の素因数がj以上の数字の数 +""" +小数の状態だと処理しづらいので、与えられた数を全て10**9倍して小数を確実になくした上で +問題文を下記のように言い換える。 +「積が10**18の倍数になるような数の組み合わせの数がいくつあるか」 +数Aiがあり、Aiの2の素因数の数がn, 5の素因数の数がmのとき、 +数Ai自体ですでにmin(n,m)個の0の数を持っている。この場合、のこり必要な0の数はx = 18-min(n,m)個である。 +ここで、n == mの場合： +Aiの相方は少なくとも2,5の素因数をそれぞれx個以上持っていなくてはならない。 +n > mの場合： +Aiの相方は少なくとも2の素因数をx-(n-m)個、5の素因数をx個持っていなくてはいけない。 +m > nの場合： +Aiの相方は少なくとも2の素因数をx個以上、5の素因数をx-(m-n)個以上持っていなくてはならない。 +""" +N = int(eval(input())) +dp = [[0] * (19) for _ in range(19)] -for _ in range(n): -    x = round(float(eval(input())) * pow(10, 9)) -    two = div(x, 2) -    five = div(x, 5) +for _ in range(N): +    a = round(float(eval(input())) * pow(10, 9)) +    two = 0 +    while a % 2 == 0 and two < 18: +        a //= 2 +        two += 1 +    five = 0 +    while a % 5 == 0 and five < 18: +        a //= 5 +        five += 1