Penalty-Based Dynamic Programming For The Identification Of Post-Translational Modifications In Peptide Mass Spectra