



'''simple docstring'''





import functools
def    _SCREAMING_SNAKE_CASE  (       UpperCamelCase							,    UpperCamelCase			):



    """simple docstring"""





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

    lowerCAmelCase__ :  Any							      =					set(UpperCamelCase			)

    @functools.cache
    def dynamic_programming(UpperCamelCase			) -> 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 __future__ import annotations

from typing import Any





class  _A						:

      def __init__(						self		,       __lowerCAmelCase = 6						):







            """simple docstring"""



            lowercase														=	None
            lowercase														=	None
            self.create_linked_list(__lowerCAmelCase						)

      def 				A__       (						self		,       __lowerCAmelCase						):







            """simple docstring"""



            lowercase														=	Node()
            lowercase														=	current_node
            lowercase														=	current_node
            lowercase														=	current_node
            for _ in range(1		,       __lowerCAmelCase						):
                  lowercase														=	Node()
                  lowercase														=	current_node
                  lowercase														=	previous_node
                  lowercase														=	current_node
            lowercase														=	self.front
            lowercase														=	previous_node

      def 				A__       (						self						):







            """simple docstring"""



            return (
                self.front == self.rear
                and self.front is not None
                and self.front.data is None
            )

      def 				A__       (						self						):







            """simple docstring"""



            self.check_can_perform_operation()
            return self.front.data if self.front else None

      def 				A__       (						self		,       __lowerCAmelCase						):







            """simple docstring"""



            if self.rear is None:
                  return

            self.check_is_full()
            if not self.is_empty():
                  lowercase														=	self.rear.next
            if self.rear:
                  lowercase														=	data

      def 				A__       (						self						):







            """simple docstring"""



            self.check_can_perform_operation()
            if self.rear is None or self.front is None:
                  return None
            if self.front == self.rear:
                  lowercase														=	self.front.data
                  lowercase														=	None
                  return data

            lowercase														=	self.front
            lowercase														=	old_front.next
            lowercase														=	old_front.data
            lowercase														=	None
            return data

      def 				A__       (						self						):







            """simple docstring"""



            if self.is_empty():
                  raise Exception("""Empty Queue"""						)







      def 				A__       (						self						):







            """simple docstring"""



            if self.rear and self.rear.next == self.front:
                  raise Exception("""Full Queue"""						)






class  _A						:

      def __init__(						self						):







            """simple docstring"""



            lowercase														=	None
            lowercase														=	None
            lowercase														=	None


if __name__ == "__main__":
       import doctest

       doctest.testmod()



