# mypy: ignore-errors
from typing import List, Optional


def three_sum(nums: List[int], target: int) -> Optional[List[int]]:
    nums_indices = [(num, index) for index, num in enumerate(nums)]
    nums_indices.sort()
    for i in range(len(nums_indices) - 2):
        if i > 0 and nums_indices[i] == nums_indices[i - 1]:
            continue
        l, r = i + 1, len(nums_indices) - 1
        while l < r:
            three_sum = nums_indices[i][0] + nums_indices[l][0] + nums_indices[r][0]
            if three_sum < target:
                l += 1
            elif three_sum > target:
                r -= 1
            else:
                indices = sorted(
                    [nums_indices[i][1], nums_indices[l][1], nums_indices[r][1]]
                )
                return indices
    return None
