
import functools




def 				a						(							snake_case__:					list[int]						,   snake_case__:					list[int]					):


				'''simple docstring'''

				# Validation
				if not isinstance(snake_case__						,   snake_case__					) or not all(isinstance(snake_case__						,   snake_case__					) for day in days					):
								raise ValueError('''The parameter days should be a list of integers'''					)

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

				if len(snake_case__					) == 0:
								return 0

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

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

				lowercase_       =					set(snake_case__					)

				@functools.cache
				def dynamic_programming(snake_case__:					int					) -> 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()






"""simple docstring"""





from graphs.minimum_spanning_tree_kruskal import kruskal



def       lowerCamelCase__		(			)							->		List[Any]:


					"""simple docstring"""





					_UpperCamelCase							 =  9
					_UpperCamelCase							 =  [
					    [0, 1, 4],
					    [0, 7, 8],
					    [1, 2, 8],
					    [7, 8, 7],
					    [7, 6, 1],
					    [2, 8, 2],
					    [8, 6, 6],
					    [2, 3, 7],
					    [2, 5, 4],
					    [6, 5, 2],
					    [3, 5, 14],
					    [3, 4, 9],
					    [5, 4, 10],
					    [1, 7, 11],
					]

					_UpperCamelCase							 =  kruskal(__snake_case,     __snake_case	)

					_UpperCamelCase							 =  [
					    [7, 6, 1],
					    [2, 8, 2],
					    [6, 5, 2],
					    [0, 1, 4],
					    [2, 5, 4],
					    [2, 3, 7],
					    [0, 7, 8],
					    [3, 4, 9],
					]

					assert sorted(__snake_case	) == sorted(__snake_case	)






