New combinatorial bounds for error correcting codes