






'''simple docstring'''
from itertools import count



def     A__						(	A_ = 50		)     ->				Optional[int]:
					_lowercase			= [1] * min_block_length

					for n in count(lowercase__		):
										fill_count_functions.append(1		)

										for block_length in range(lowercase__    ,      n + 1		):
															for block_start in range(n - block_length		):
																				fill_count_functions[n] += fill_count_functions[
																				    n - block_start - block_length - 1
																				]

															fill_count_functions[n] += 1

										if fill_count_functions[n] > 1_000_000:
															break

					return n


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




import functools





def a(lowercase__      ,			lowercase__						):





	'''simple docstring'''

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

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

	if len(lowercase__						) == 0:
		return 0

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

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

	snake_case_   		=			set(lowercase__						)

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