

import functools



def       __lowerCAmelCase      (						A       ,     A    ):






	if not isinstance(UpperCAmelCase__       ,     UpperCAmelCase__    ) or not all(isinstance(UpperCAmelCase__       ,     UpperCAmelCase__    ) for day in days    ):
		raise ValueError("The parameter days should be a list of integers"    )

	if len(UpperCAmelCase__    ) != 3 or not all(isinstance(UpperCAmelCase__       ,     UpperCAmelCase__    ) for cost in costs    ):
		raise ValueError("The parameter costs should be a list of three integers"    )

	if len(UpperCAmelCase__    ) == 0:
		return 0

	if min(UpperCAmelCase__    ) <= 0:
		raise ValueError("All days elements should be greater than 0"    )

	if max(UpperCAmelCase__    ) >= 366:
		raise ValueError("All days elements should be less than 366"    )

	UpperCAmelCase_       				=			set(UpperCAmelCase__    )

	@functools.cache
	def dynamic_programming(A    ) -> int:
		if index > 365:
			return 0

		if index not in days_set:
			return dynamic_programming(index + 1    )

		return min(
		    costs[0] + dynamic_programming(index + 1    )       ,     costs[1] + dynamic_programming(index + 7    )       ,     costs[2] + dynamic_programming(index + 30    )       ,     )

	return dynamic_programming(1    )


if __name__ == "__main__":
				import doctest

				doctest.testmod()


from .imports import is_tqdm_available


if is_tqdm_available():
				from tqdm.auto import tqdm as _tqdm

from ..state import PartialState



def       __lowerCAmelCase      (						A = True       ,     *A       ,     **A    ):
	if not is_tqdm_available():
		raise ImportError("Accelerate's `tqdm` module requires `tqdm` to be installed. Please run `pip install tqdm`."    )
	UpperCAmelCase_       				=			False
	if main_process_only:
		UpperCAmelCase_       				=			PartialState().local_process_index == 0
	return _tqdm(*A       ,     **A       ,     disable=A    )