def parse(inFile):
    [N,M] = inFile.getInts()
    boxes = inFile.getInts()
    toys = inFile.getInts()
    boxes = [boxes[2*i:2*i+2] for i in xrange(N)]
    toys = [toys[2*i:2*i+2] for i in xrange(M)]
    return (boxes, toys)

def solve((boxes, toys)):
    B = len(boxes)
    T = len(toys)
    a = [[0 for i in xrange(B+1)] for j in xrange(T+1)]
    for t in xrange(T):
        for b in xrange(B):
            a[t+1][b+1] = max(a[t+1][b],a[t][b+1])
            if (boxes[b][1] == toys[t][1]):
                k = boxes[b][1]
                bs = [[z,boxes[z][0]] for z in xrange(b,-1,-1) if boxes[z][1] == k]
                ts = [[z,toys[z][0]] for z in xrange(t,-1,-1) if toys[z][1] == k]
                for j in xrange(1,len(bs)):
                    bs[j][1] += bs[j-1][1]
                for j in xrange(1,len(ts)):
                    ts[j][1] += ts[j-1][1]
                a[t+1][b+1] = max(a[t+1][b+1],max([min(t0[1],b0[1])+a[t0[0]][b0[0]] for t0 in ts for b0 in bs]))
    return a[-1][-1]

if __name__ == "__main__":
    from GCJ import GCJ
    GCJ(parse, solve, "/Users/lpebody/gcj/setup/", "c").run()

            
