It's a little confusing, because your script and the output shown aren't exactly the same.
The biggest problems are with the atom selections; one is incorrect, the other may be correct but is somewhat cumbersome, both to write and to understand. The easy one first--
CHARMM> CONS HARM FORCE 200 MASS SELE atom * * END COMP
***** LEVEL 0 WARNING FROM *****
***** Unexpected end during parsing
The ATOM keyword requires 3 text identifiers, in the order SEGID, RESID, TYPE; the END keyword is being interpreted as the atom name (TYPE), and is therefore confuses the CHARMM command parser. A more correct form would be SELE atom * * * END and is the same as SELE ALL END (which is the default), and possibly not what is intended, and usually not needed.
The FORCE parameter seems overly large, when used in conjunction with the MASS keyword.
In the the case of the long list of BYNUM atom selections, it isn't clear if it is correct without examing the PSF or a CHARMM formatted coord file (.crd). I'd guess that some other computer program created the text for that command-- there are easier ways for humans to use. The following examples assume each thiol is a separate RESIdue in a segment named TH, and each is numbered S-C1-C2-C3- etc.
! RESTRAINT ON HEAVYATOMS ONLY
cons harm mass force 50. sele .not. type H* end
! CLEAR RESTRAINTS
cons harm clear
! REDUCE FORCE, RESTRAIN JUST "S" END OF CHAIN
cons harm mass force 25. sele atom TH * S .or. atom TH * C1 -
.or. atom TH * C2 .or. atom TH * C3 end
! CLEAR RESTRAINTS, FINAL MIN
cons harm clear