Hello, new world! again Objective:


  This code-golf is about creating 2 different sourcecodes that both outputs exactly: Hello, new world! again. without linefeed, and when combining the two sourcecodes into one sourcecode it should still output exactly: Hello, new world! again.


Rules:


Your programs should take no input (from user, filename, network or anything).
You can choose any combination of programming languages, from one language for all three sourcecodes to three different languages.
The combination of the two sourcecodes to create the third is done by putting alternating characters from both from start to end and fill up the third sourcecode from start to end.
You must choose 10 different characters that both sourcecodes may use (case sensitive). All other characters is mutual exclusive between the two sourcecodes. Characters may be re-used without restriction. Exactly all 10 characters choosen must be used in both sourcecodes atleast once.


Clarification example on sourcecode combination:

Javascript          sourcecode: console.log("Hello, new world! again.");
GolfScript          sourcecode: 'Hello, new world! again.'
Combined (unknown?) sourcecode: c'oHneslolloe,. lnoegw( "wHoerllldo!,  angeawi nw.o'rld! again.");


The above example does however violate rule #4 as more than 10 characters is "shared" in both sourcecodes. And the combined sourcecode does not output: Hello, new world! again.

Be sure to declare what programming languages is used (all three) and what 10 characters that is allowed in both sourcecodes. 

This is code-golf, least bytes in combined sourcecode wins! Good luck, have fun!
C99 + sh + C11, 165 162 146 145 combined chars

Edit: using @flonk's trick I managed to put the "comment" in C (making use of C11's u"" Unicode literals).

Common characters are: acehinortu.

hello.c (106):

*a="\2+++++++++++++++++++++++++++++++++";i;main(){for(;i&lt;24;)putchar("Lipps0$ri{${svph%$ekemr2"[i++]+~3);}


hello.sh (39):

true
echo -n 'Hello, new world! again.'


hello-combined.c (145):

*tar=u"e\
2e+c+h+o+ +-+n+ +'+H+e+l+l+o+,+ +n+e+w+ +w+o+r+l+d+!+ +a+g+a+i+n+.+'";i;main(){for(;i&lt;24;)putchar("Lipps0$ri{${svph%$ekemr2"[i++]+~3);}




Here are some utilities that might prove useful for other participants.

combine.c:

#include &lt;stdio.h&gt;
int main(int argc, char *argv[]) {
  FILE *f1 = fopen(argv[1], "r"), *f2 = fopen(argv[2], "r");
  while (!feof(f1) || !feof(f2)) {
    int c1 = fgetc(f1), c2 = fgetc(f2);
    if (c1 != EOF) putchar(c1);
    if (c2 != EOF) putchar(c2);
  }
  return 0;
}


char-check.{ba,z}sh:

comm -12 &lt;(grep -o . "$1" | sort | uniq) \
         &lt;(grep -o . "$2" | sort | uniq) | tr -d '\n'




Here's a variation that unfortunately ended up (considerably) longer, but it's pretty cool in how it works.  (I didn't bother getting the intersection between the sets of characters down to 10, since it ended up longer anyway.)

hello.c (113):

*a="\5Lipps0$ri{${svph%$ekemr2+++++++++++",*b=&amp;a,c=6;i;main(){char*p=*b;for(i=c/8;p[i]-50;)putchar(p[i+=c/4]-4);}


hello.sh (51):

true
echo -n 'Hello, new world! again.' #     tr  1


hello-combined.c (164):

*tar=u"e\
5eLcihpop s-0n$ r'iH{e$l{lsov,p hn%e$we kweomrrl2d+!+ +a+g+a+i+n+.+'+ +#" , * b = &amp;tar, c =16;i;main(){char*p=*b;for(i=c/8;p[i]-50;)putchar(p[i+=c/4]-4);}


This one is fun, because it doesn't just "comment out" a bunch of characters, but actually stores the characters it prints inside the string literal and accounts for the extra characters in the for-loop of the generated program.