Inspired by HQ9+: 4-Behavior Polyglot Create a program that can be run in 4 different languages such that:

One language prints &quot;Hello World!&quot;
One language outputs its own source code
One language outputs 99 bottles of beer on the wall, that is:
99 bottles of beer on the wall
99 bottles of beer
Take one down, pass it around
98 bottles of beer on the wall

98 bottles of beer on the wall
98 bottles of beer
Take one down...

&lt;the pattern continues for a while&gt;

...pass it around
1 bottle of beer on the wall

1 bottle of beer on the wall
1 bottle of beer
Take one down, pass it around
No more bottles of beer on the wall


One language takes a nonnegative integer as an input and outputs that integer + 1

Rules and Scoring

This is code golf, so shortest code wins. Score in character count rather than byte count for this challenge so that golfing languages that use specialized codepages are not disadvantaged by their UTF-8 representations.
Standard rules and loopholes apply
Each language may optionally output a trailing newline for its designated output
Each language may use any I/O convention that is convenient to that language. The convention does not need to be consistent across all four languages; for instance, one uses stdout, another uses the return value, one writes to a file, and the last one spawns an alert containing the text.
Golfing languages that have the option to use specialized codepages must use a standard encoding; they may not take advantage of a byte being interpreted as a different character in another encoding.
Hello World may optionally include a comma after &quot;Hello&quot;, thus Hello, World! is a valid output.
Standard quine rules apply and the only superfluous output allowed is a trailing newline.

Text, or any other &quot;language&quot; where all programs are quines, is not a valid language for the quine.


99 Bottles of Beer requires:

A blank line between each verse
No blank lines within any verse
The singular/plural distinction of 'bottle' vs 'bottles'
no more instead of 0 on the last line
Each line may have any amount of trailing whitespace (or none at all)


The incrementing program must support all input integers that can be incremented natively by its language.

For languages which support unsigned integers, the largest unsigned integer should be used
For languages which represent all numbers as floating point numbers, this would require supporting all input numbers up to \$2^{53}-1\$.
For languages which natively support arbitrary-sized integers, all positive integers must be supported.



Format the header of your answer like this:
# &lt;language for H, &lt;language for Q&gt;, &lt;language for 9&gt;, &lt;language for +&gt;, n characters
Ruby, &gt;&lt;&gt;, HQ9+, Befunge-93, 62 characters
#9&amp;1+.@.10[0[fr'
puts&quot;\u0048ello World!&quot;#.1*57;!?lo r]r}:*3da'

&quot;Hello World!&quot; (Ruby)
Relevant part of code:
puts&quot;\u0048ello World!&quot;
quine (&gt;&lt;&gt;)
After colliding with the # mirror, both lines are read as string literals and printed with a newline between.
99 bottles of beer on the wall (HQ9+)
Code contains no H or Q, and exactly one 9, so the lyrics of the song are printed once.
+1 program (Befunge-93)
After jumping over 9 due to the # trampoline, a simple +1 program is run &amp;1+.@