Multiple program Quinecatenate! Your task is to give three different languages A, B, C, and write two different programs P and Q such that: 

P is a quine in language A, but not a quine in B nor C; 

Q is a quine in language B, but not a quine in A nor C; and 

Q concatenated after P (without any new characters added in between) is a quine in language C, but not in B nor A. 

This is codegolf, where your score is the length of the final, concatenated quine. Again, adhere to the rules of proper quines  -- no reading your source code, no empty programs etc.
Fission + CJam + GolfScript, 38 36 bytes

Fission, 6 bytes

'!+OR"


This is one of Martin Büttner's Fission quines. Try it online!

CJam, 30 bytes

' {"''"@*" "+YX#&lt;
\"0$~"N}0$~


The last byte is a linefeed. Try it online!

GolfScript, 36 bytes

'!+OR"' {"''"@*" "+YX#&lt;
\"0$~"N}0$~


The last byte is a linefeed. Try it online!

Verification

$ wc -c P Q
 6 P
30 Q
36 total
$ cat P Q &gt; P+Q
$ 
$ Fission P 2&gt;&amp;- | diff -qs - P
Files - and P are identical
$ cjam P 2&gt;&amp;- | diff -qs - P
Files - and P differ
$ golfscript P 2&gt;&amp;- | diff -qs - P
Files - and P differ
$ 
$ cjam Q 2&gt;&amp;- | diff -qs - Q
Files - and Q are identical
$ golfscript Q 2&gt;&amp;- | diff -qs - Q
Files - and Q differ
$ Fission Q 2&gt;&amp;- | diff -qs - Q
Files - and Q differ
$ 
$ golfscript P+Q 2&gt;&amp;- | diff -qs - P+Q
Files - and P+Q are identical
$ Fission P+Q 2&gt;&amp;- | diff -qs - P+Q
Files - and P+Q differ
$ cjam P+Q 2&gt;&amp;- | diff -qs - P+Q
Files - and P+Q differ


How it works

Fission


R spawns an atom that moves right, wrapping around at the edge.
" toggles printing mode. Everything up to the next " is printed.
'! sets the atom's to the code point of '!'.
+ increments the atom's mass, setting it to the code point of ".
O prints the character whose code point is the atom's mass and destroys the atom.


CJam

'       e# Push a space character.
{       e# Push the following code block:
  "''"  e# Push that string.
  @*    e# Separate its characters by spaces.
  " "+  e# Append one more space.
  YX#   e# Raise 2 to the first power. Pushes 2.
  &lt;     e# Discard all but the first two characters of the string, i.e., "' ".
  \     e# Swap the string "' " with the code block in execution.
  "0$~" e# Push that string.
  N     e# Push a linefeed.
}       e#
0$~     e# Push a copy of the code block and execute it.


GolfScript

'!+OR"' # Push that string.
{       # Push the following code block:
  "''"  # Push that string.
  @*    # Join its characters, separating them by the first string.
  " "+  # Append a space.
  YX    # Undefined token. Does nothing.
  #&lt;    # Comment.
  \     # Swap the string with the code block in execution.
  "0$~" # Push that string.
  N     # Undefined token. Does nothing.
}       #
0$~     # Push a copy of the code block and execute it.