Probability and Counting Techniques