def METHOD_NAME(self, iac_records: list[Record], secrets_records: list[Record], cves_reports: list[dict[str, Any]]) -> Base3dPolicyCheck:
    check = Base3dPolicyCheck()
    self._fill_check_metadata(check)
    check.predicaments = []
    cves_definition: dict[str, Any] = {}
    iac_definition: dict[str, Any] = {}
    secrets_definition: dict[str, Any] = {}
    for definition in self.check_definition:
        if "cves" in definition.keys():
            cves_definition = definition["cves"]
        elif "iac" in definition.keys():
            iac_definition = definition["iac"]
        elif "secrets" in definition.keys():
            secrets_definition = definition["secrets"]
    cve_predicaments: list[Predicament] = list(filter(None, [self._create_module_predicament(cves_definition, cve_report) for cve_report in cves_reports]))
    iac_predicaments: list[Predicament] = list(filter(None, [self._create_module_predicament(iac_definition, iac_record) for iac_record in iac_records]))
    secrets_predicaments: list[Predicament] = list(filter(None, [self._create_module_predicament(secrets_definition, secrets_record) for secrets_record in secrets_records]))
    # Generating all predicaments combinations while filtering empty lists
    all_combinations = list(itertools.product(*filter(bool, [cve_predicaments, iac_predicaments, secrets_predicaments])))
    for combination in all_combinations:
        check.predicaments.append(
            Predicament(
                logical_op='and',
                predicaments=[predicament for predicament in combination]
            )
        )
    return check