I sometimes like to translate over to Pascal, just to check results. The modulus for each generator is also stored as a global, as it is used when seeding the LCGs. As larger LCGs will be used in a practical application, a word about integer overflow is in order here. Also make sure to use only positive values as seeds. I have not experimented with negative seed-values.
Alternate arrangements are, of course, possible.
Addition is used for simplicity. Xor-ing, multiplication, and even more elaborate schemes are possible. This is to facilitate encryption by addition or xoring to bytes of cleartext. Customizing is a likely option in this function. Try skipping a number of times which is relatively prime to all the moduli.