I am adding this answer to specify the rules of the standard.
Here this is utilizing the return value of printf. Respectively 3-1 spaces(' ') and then again space (as you specified) and 4-1 spaces and then again 1 space is being printed. And then the total number of characters written is returned. That is how the sum is being done.
I just remember this rule
printf("%*c",X,C) prints the char C in a field of size X
All these behavior is explained in C11 Standard.
From standard §7.21.6.1p4
An optional minimum field width. If the converted value has fewer
characters than the field width, it is padded with spaces (by default)
on the left (or right, if the left adjustment flag, described later,
has been given) to the field width. The field width takes the form of
an asterisk * (described later) or a nonnegative decimal integer.
And in the same section §7.21.6.1p5
As noted above, a field width, or precision, or both, may be
indicated by an asterisk. In this case, an int argument supplies the
field width or precision
At last §7.21.6.1.p14
The fprintf function returns the number of characters transmitted, or
a negative value if an output or encoding error occurred.
To clear your idea this example will be good enough (I am using %d here so that you get the idea of the field).
If x = 10 and y=2 then it will be
printf("%*d%*d", x, x, y, y);
More clearly
| | | | | | | | |1|0| |2|
1 2 3 4 5 6 7 8 9 10 \ \
11 12
That's how 12 characters are printed.