human
Each item in the game has a level. The higher the level is, the higher basic parameters the item has. We shall consider only the following basic parameters: attack (atk), defense (def) and resistance to different types of impact (res).

Each item belongs to one class. In this problem we will only consider three of such classes: weapon, armor, orb.

Besides, there's a whole new world hidden inside each item. We can increase an item's level travelling to its world. We can also capture the so-called residents in the Item World

Residents are the creatures that live inside items. Each resident gives some bonus to the item in which it is currently located. We will only consider residents of types: gladiator (who improves the item's atk), sentry (who improves def) and physician (who improves res).

Each item has the size parameter. The parameter limits the maximum number of residents that can live inside an item. We can move residents between items. Within one moment of time we can take some resident from an item and move it to some other item if it has a free place for a new resident. We cannot remove a resident from the items and leave outside — any of them should be inside of some item at any moment of time.

Laharl has a certain number of items. He wants to move the residents between items so as to equip himself with weapon, armor and a defensive orb. The weapon's atk should be largest possible in the end. Among all equipping patterns containing weapon's maximum atk parameter we should choose the ones where the armor’s def parameter is the largest possible. Among all such equipment patterns we should choose the one where the defensive orb would have the largest possible res parameter. Values of the parameters def and res of weapon, atk and res of armor and atk and def of orb are indifferent for Laharl.

Find the optimal equipment pattern Laharl can get.

Input

The first line contains number n (3 ≤ n ≤ 100) — representing how many items Laharl has.

Then follow n lines. Each line contains description of an...
The above is tricky. Write me a correct solution in PYTHON.
 What is a Python code to find the optimal equipment pattern Laharl can get?
assistant
#Here is Python code to find the optimal equipment pattern Laharl can get.

def better(a, b):
    for i in xrange(len(a)):
        if a[i] < b[i]:
            return False
    return True
related = lambda x, y: 'w' in x and 'g' in y or 'm' in x and 'sen' in y or 'b' in x and 'ph' in y
n = int(raw_input())
weps, arms, orbs = [],[],[]
sumSize = 0
ind = {}
itemlist, naslist = [], []
for i in xrange(n):
    ss = raw_input().split()
    name,typ = ss[0], ss[1]
    atk,dfn,res,siz = (int(ss[i]) for i in xrange(2, len(ss)))
    itemlist.append((name, atk, dfn, res, siz, typ))
    if 'wea' in typ:weps.append((name, atk, dfn, res, siz, typ))
    elif 'arm' in typ: arms.append((name, atk, dfn, res, siz, typ))
    else: orbs.append((name, atk, dfn, res, siz, typ))
    ind[name] = i
    sumSize += siz
nas = int(raw_input())
glads,sents,phys = [],[],[]
belong = [0] * n
ppl = [[] for i in xrange(n)]
used = [False] * nas
for i in xrange(nas):
    ss = raw_input().split()
    name,typ,val,item = ss[0], ss[1], int(ss[2]), ss[3]
    naslist.append((name,typ,val,item))
#    print item, ind[item]
    ppl[ind[item]].append(name)
    if related(itemlist[ind[item]][5], typ):
        belong[ind[item]] += val
    if 'gla' in typ:
        glads.append((val, name, i))
    elif 'sen' in typ:
        sents.append((val, name, i))
    else: 
        phys.append((val, name, i))
glads = sorted(glads, reverse=True)
sents.sort(reverse=True)
phys.sort(reverse=True)
sumG = [0] * len(glads)
if len(glads): sumG[0] = glads[0][0]
for i in xrange(1, len(glads)): sumG[i] = sumG[i - 1] + glads[i][0]
sumS = [0] * len(sents)
if len(sents): sumS[0] = sents[0][0]
for i in xrange(1, len(sents)): sumS[i] = sumS[i - 1] + sents[i][0]
sumP = [0] * len(phys)
if len(phys): sumP[0] = phys[0][0]
for i in xrange(1, len(phys)): sumP[i] = sumP[i - 1] + phys[i][0]
solVal = [-1, -1, -1]
sol = [-1, -1, -1]
for i in xrange(len(weps)):
    for j in xrange(len(arms)):
        for k in xrange(len(orbs)):
            w,a,o = weps[i], arms[j], orbs[k]
            if nas >= sumSize:
                newVal = [w[1] + belong[ind[w[0]]], a[2] +...