Packing and covering in combinatorics