public Container pack(List<BoxItem> boxes, List<Container> containers, long deadline, AtomicBoolean interrupt) {
		return pack(boxes, containers, () -> deadlineReached(deadline) || interrupt.get());
	}
public Container pack ( List < BoxItem > boxes , List < Container > containers , long deadline , AtomicBoolean interrupt ) { return pack ( boxes , containers , ( ) -> deadlineReached ( deadline ) || interrupt . get ( ) ) ; }
Return a container which holds all the boxes in the argument

@param boxes      list of boxes to fit in a container
@param containers list of containers
@param deadline   the system time in milliseconds at which the search should be aborted
@param interrupt  When true, the computation is interrupted as soon as possible.
@return index of container if match, -1 if not