Let's say you want to add a weight of w% to the list. In the case of your first example, w = 25.
First, find the total sum of the current weights.
x 100
y 50
z 50
----
Total 200
Multiply each current weight by (100-w).
x 7500
y 3750
z 3750
Multiply w by the total you previously found, and add it to the list.
x 7500
y 3750
z 3750
w 5000
You can reduce the numbers to their smallest form by dividing each one by the GCD of all the weights.
x 6
y 3
z 3
w 4
Watch out for overflow errors when using this method. It may be best to use some kind of bignum data type.