Padding is performed as follows: "i" bytes of value "i" are appended
to the message so that the length in bytes of the padded message
becomes congruent to 0, modulo 16. At least one byte and at most 16
16 bytes are appended.

It should say:

Padding is performed as follows: "i" bytes of value "i" are appended
to the message so that the length in bytes of the padded message
becomes congruent to 0, modulo 16. At least one byte and at most
16 bytes are appended.

...
/* Process each 16-word block. */
For i = 0 to N/16-1 do
/* Checksum block i. */
For j = 0 to 15 do
Set c to M[i*16+j].
Set C[j] to S[c xor L].
Set L to C[j].
end /* of loop on j */
end /* of loop on i */
The 16-byte checksum C[0 ... 15] is appended to the message. Let
M[0
with checksum), where N' = N + 16.

It should say:

...
/* Process each 16-word block. */
For i = 0 to N/16-1 do
/* Checksum block i. */
For j = 0 to 15 do
Set c to M[i*16+j].
Set C[j] to C[j] xor S[c xor L].
Set L to C[j].
end /* of loop on j */
end /* of loop on i */
The 16-byte checksum C[0 ... 15] is appended to the (padded)
message.
Let M[0..N'-1] be the message with padding and checksum appended,
where N' = N + 16.