def prefer_insertions_at_309_and_315(mb):
    """Prefer alternatives that include 309.1C or 315.1C over others.

    There are two multi-C runs at the beginning of the 300's and by
    convention, any insert in one of those runs is pushed to the end.
    Mostly, the other rules will pick these, but in some circumstances
    with other substitutions or deletions in this area, these won't get
    picked - although we want them to. Thus, this special case preference.
    """
    special_cases = ['309.1C', '315.1C']
    # mb: mismatch block 
    if len(mb) > 1:
        scores = [0] * len(mb)
        # pos: position
        # aa: alternate alignment
        for pos, aa in enumerate(mb):
            for variant in aa:
                if str(variant) in special_cases:
                    scores[pos] += 1
        if max(scores) > 0:
            # lsi: indices of lower scoring alternate alignments
            lsi = list(x for x in range(len(mb)) if scores[x] < max(scores))
            # remove low scoring alignments from the mismatch block
            # in reverse order so as to not mess up the preceding indices
            lsi.sort(reverse=True)
            for i in lsi:
                mb.pop(i)

    return mb