An S0C4 is a storage protection error. In other words, your program attempted to read or write to storage it is not allowed to use.
An S0C7 is a packed data exception error; in other words, a data area that is supposed to contain packed decimal data does not contain packed decimal data. Often (but not always) an S0C7 error is really a reflection of an S0C4 error, except by chance, a bad address (in terms of the program) happens to point to a storage address it is allowed to read rather than a storage address it is not allowed to read.
Error analysis programs like the Abend-Aid product that is installed on quite a few z/OS systems will attempt to locate and display the data areas associated with an S0C7 error; that can be quite convenient in program analysis. Even with this analysis it is up to the programmer to determine the point in their program where the error occurred; as Rayster has discovered this can be difficult. Analysis of an S0C7 error must follow two major paths; determine if there is a bad address, or determine how data in a presumably valid data area got bad