def get_most_probable_words(wordlist, characters, pattern):
    """Get a list of most probable words

    >>> word_list = ["trail", "banana", "frail", "drain"]
    >>> get_most_probable_words(word_list, "filyar", "+rail")
    ['frail']

    :param wordlist: wordlist to use
    :param characters: scrambled characters
    :param pattern: pattern to match against
    :returns: list of probable words
    """
    characters = characters.lower()
    pattern = pattern.lower()

    results = []
    len_of_pattern = len(pattern)
    count_of_characters = {i: characters.count(i) for i in characters}
    non_empty_indices_in_pattern = {i: char for i, char in enumerate(pattern) if char != "+"}

    for word in wordlist:
        if len(word) != len_of_pattern:
            continue

        for char in word:
            if char not in characters or word.count(char) > count_of_characters[char]:
                break
        else:
            for idx, char in non_empty_indices_in_pattern.items():
                if word[idx] != char:
                    break
            else:
                results.append(word)

    return results