human
Write me a the Python code you requested given the following:
I found an interesting problem on https://codeforces.com/problemset/problem/929/C:
Завтра у хоккейной команды, которой руководит Евгений, важный матч. Евгению нужно выбрать шесть игроков, которые выйдут на лед в стартовом составе: один вратарь, два защитника и три нападающих.

Так как это стартовый состав, Евгения больше волнует, насколько красива будет команда на льду, чем способности игроков. А именно, Евгений хочет выбрать такой стартовый состав, чтобы номера любых двух игроков из стартового состава отличались не более, чем в два раза. Например, игроки с номерами 13, 14, 10, 18, 15 и 20 устроят Евгения, а если, например, на лед выйдут игроки с номерами 8 и 17, то это не устроит Евгения.

Про каждого из игроков вам известно, на какой позиции он играет (вратарь, защитник или нападающий), а также его номер. В хоккее номера игроков не обязательно идут подряд. Посчитайте число различных стартовых составов из одного вратаря, двух защитников и трех нападающих, которые может выбрать Евгений, чтобы выполнялось его условие красоты.

-----Входные данные-----

Первая строка содержит три целых числа g, d и f (1 ≤ g ≤ 1 000, 1 ≤ d ≤ 1 000, 1 ≤ f ≤ 1 000) — число вратарей, защитников и нападающих в команде Евгения. 

Вторая строка содержит g целых чисел, каждое в пределах от 1 до 100 000 — номера вратарей.

Третья строка содержит d целых чисел, каждое в пределах от 1 до 100 000 — номера защитников.

Четвертая строка содержит f целых чисел, каждое в пределах от 1 до 100 000 — номера нападающих.

Гарантируется, что общее количество игроков не превосходит 1 000, т. е. g + d + f ≤ 1 000. Все g + d + f номеров игроков различны.

-----Выходные данные-----

Выведите одно целое число — количество возможных стартовых составов.

-----Примеры-----
Входные данные
1 2 3
15
10 19
20 11 13

Выходные данные
1

Входные данные
2 3 4
16 40
20 12 19
13 21 11 10

Выходные данные
6


-----Примечание-----

В первом примере всего один вариант для выбора состава, который удовлетворяет описанным условиям, поэтому ответ 1.

Во втором примере подходят следующие игровые сочетания (в порядке...

I tried it in Python, but could not do it. Can you solve it?
assistant
#Here is the Python code you requested.

import math
def main():
    g, d, f = map(int, input().split())
    lst1 = list(map(int, input().split()))
    lst2 = list(map(int, input().split()))
    lst3 = list(map(int, input().split()))
    lst0 = []
    precounted = []
    ans = 0

    lst0 += [(c, 1) for c in lst1]
    lst0 += [(c, 2) for c in lst2]
    lst0 += [(c, 3) for c in lst3]

    lst0.sort()

    for i in range(len(lst0)):

        if len(precounted) == 0:
            a1, a2, a3 = (0, 0, 0)
        else:
            a1, a2, a3 = precounted[len(precounted) - 1]

        if (lst0[i][1] == 1):
            a1 += 1
        elif (lst0[i][1] == 2):
            a2 += 1
        else:
            a3 += 1

        precounted.append((a1, a2, a3))

        def product(iterable):
            prod = 1
            for n in iterable:
                prod *= n
            return prod

        def npr(n, r):
            assert 0 <= r <= n
            return product(range(n - r + 1, n + 1))

        def ncr(r, n):
            if r > n:
                return 0
            assert 0 <= r <= n
            if r > n // 2:
                r = n - r
            return npr(n, r) // math.factorial(r)

    for i in range(len(lst0) - 1):
        l = i + 1
        r = len(lst0)
        while l + 1 < r:
            m = (l + r) // 2
            if lst0[i][0] * 2 >= lst0[m][0]:
                l = m
            else:
                r = m
        max_possible_num = lst0[l][0]
        max_possible_ind = l

        a1 = precounted[max_possible_ind][0] - precounted[i][0]
        a2 = precounted[max_possible_ind][1] - precounted[i][1]
        a3 = precounted[max_possible_ind][2] - precounted[i][2]
        n1 = 1
        n2 = 2
        n3 = 3

        if lst0[i][1] == 1:
            n1 -= 1
        elif lst0[i][1] == 2:
            n2 -= 1
        else:
            n3 -= 1
        ans += ncr(n1, a1) * ncr(n2, a2) * ncr(n3, a3)

    print(ans)

main()