I have python code. 

    import itertools
    
    from decorators import timer
    from settings import MENU, CASH
    
    
    class Cocktail(object):
        def __init__(self, group, name, sell, count=0):
            self.group = group
            self.name = name
            self.sell = sell
            self.count = count
    
    
    class Check(object):
        def __init__(self, cash, menu=MENU):
            self.__cash = cash
            self.__cheapest_cocktail = 10000
            self.__menu = self.__read_menu(menu)
            self.__matrix = self.__create_matrix()
            self.correct = []
    
        def __read_menu(self, menu):
            result = []
            for group in menu:
                key = group.keys()[0]
                for cocktail in group[key]:
                    if self.__cheapest_cocktail > cocktail['sell']:
                        self.__cheapest_cocktail = cocktail['sell']
    
                    result.append(Cocktail(
                        key,
                        cocktail['name'],
                        cocktail['sell'],
                    ))
    
            return result
    
        def __create_matrix(self):
            result = []
            max_count = self.__cash // self.__cheapest_cocktail
            for cocktail in self.__menu:
                row = []
                for i in range(0, max_count):
                    row.append(Cocktail(
                        cocktail.group,
                        cocktail.name,
                        cocktail.sell,
                        i
                    ))
    
                result.append(row)
            return result
    
        def find_combinations(self):
            for check in itertools.product(*self.__matrix):
                if sum([(c.sell * c.count) for c in check]) == self.__cash:
                    self.correct.append(check)
    
    
    check = Check(CASH)
    check.find_combinations()

check.__matrix size 80x25

It's works fine, but slow. 

Could anybody help make this faster.