You can do it many many different ways, but heres couple... The first is to break the list up into three seperate lists, then depending on an initial decision, pick an item from the appropriate list.

[pascal]
const
_commonItems = 10;
_rareItems = 5;
_superRareItems = 5;

_chanceOfRare = 40;
_chanceOfSuperRare = 10;

commonItems = array[1.._commonItems] of string = ('common1','common2'....'commonn');
rareItems = array[1.._rareItems] of string = ('rare1'...'raren');
superRareItems = array[1.._superRareItems] of string = ('superrare1'..'superraren');

function pickItem:string;
var
crsr : integer;
begin
crsr:=random(100)+1;

if (crsr>=1) and (crsr {lessthan} =_chanceOfSuperRare) then
result:=superRareItems[random(_superRareItems)+1]
else
if (csrs>_chanceOfSuperRare) and (csrs {lessthan} =_chanceOfSuperRare+_chanceOfRare) then
result:=rareItems[random(_rareItems)+1]
else
result:=commonItems[random(_commonItems)+1];
end;
[/pascal]

You could keep them in a single list and do something like this...

[pascal]
const
_items = 100;
_chanceOfRare = 40;
_chanceOfSuperRare = 10;

items : array[1.._items] of string = ('name1','name2'...'namen');
itemsWeight : array[1..items] of integer = (weight1, weight2...weightn);

function pickItem:string;
var
crsr : integer;
itemNo : integer;
begin
crsr:=random(100)+1;

if (crsr>=1) and (crsr {lessthan} =_chanceOfSuperRare) then
crsr:=3
else
if (csrs>_chanceOfSuperRare) and (csrs {lessthan} =_chanceOfSuperRare+_chanceOfRare) then
crsr:=2
else
crsr:=1;

itemNo:=random(_items)+1;

while (itemWeights[itemNo] {does not equal} crsr) do
begin
inc(itemNo);
if (itemNo>_items) then
itemNo:=1;
end;

result:=items[itemNo];
end;
[/pascal]

Simply pick which class you want (common, rare, super rare), dive into the list at a random point and return the item of the require class you want. I've not tested any of this code, so I can't guarantee it works, but it should give you a couple of ideas.

Note:- The comments in the code should be replace by the appropriate operator... the symbols break the code parser and ruin the code fragment.