Здравствуйте. Код писал сам, и вроде как все логично, но не принимает, вывод условию по-моему соответствует, может кто сможет подсказать, куда обратить внимание. Спасибо.
public void processVideos() {
        List<Advertisement> advertisementList = new ArrayList<>();
        for (Advertisement advertisement : storage.list()) {
            if (advertisement.duration <= timeSeconds && advertisement.hits > 0) {
                advertisementList.add(advertisement);
            }
        }
        if (advertisementList.isEmpty()) {
            throw new NoVideoAvailableException();
        }
        backpack(advertisementList);
        List<List<Advertisement>> newListList = new ArrayList<>();

        for (List<Advertisement> list : listList) {
            if (duration(list) <= timeSeconds)
                newListList.add(list);
        }
        Collections.sort(newListList, Comparator.comparing(this::initialAmount));
        Collections.sort(newListList, Comparator.comparing(this::duration));
        List<Advertisement> result = newListList.get(0);
        Collections.sort(result, Comparator.comparing(Advertisement::getDuration));
        for (Advertisement advertisement : result) {
            displayInPlayer(advertisement);
            advertisement.revalidate();
        }
    }


    public void backpack(List<Advertisement> list) {
        if (!list.isEmpty()) {
            listList.add(list);
        }
        for (int i = 0; i < list.size(); i++) {
            List<Advertisement> newList = new ArrayList<>(list);
            newList.remove(i);
            backpack(newList);
        }
    }

    public long initialAmount(List<Advertisement> list) {
        long initialAmount = 0;
        for (Advertisement advertisement : list) {
            initialAmount = initialAmount + advertisement.amountPerOneDisplaying;
        }
        return initialAmount;
    }

    public int duration(List<Advertisement> list) {
        int duration = 0;
        for (Advertisement advertisement : list) {
            duration = duration + advertisement.duration;
        }
        return duration;
    }

    private void displayInPlayer(Advertisement advertisement) {
        System.out.println(advertisement.getName() + " is displaying... " + advertisement.getAmountPerOneDisplaying() +
                ", " + (1000 * advertisement.getAmountPerOneDisplaying() / advertisement.getDuration()));
    }
}