





import functools







def    _lowerCamelCase  (__lowerCamelCase  :     Any					,  __lowerCamelCase  :     Dict     )   ->    Union[str, Any]:






			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"     )

			a__     = set(UpperCamelCase__     )

			@functools.cache
			def dynamic_programming(__lowerCamelCase  :     Tuple     ) -> 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'''


def    _lowerCamelCase  (__lowerCamelCase  :     int = 400_0000     )   ->    int:
			a__     = [0, 1]
			a__     = 0
			while fib[i] <= n:
						fib.append(fib[i] + fib[i + 1]     )
						if fib[i + 2] > n:
									break
						i += 1
			a__     = 0
			for j in range(len(__lowerCamelCase     ) - 1     ):
						if fib[j] % 2 == 0:
									total += fib[j]

			return total


if __name__ == "__main__":
		print(f"""{solution() = }""")



