import sys


class TrieNode:
    def __init__(self):
        self.nexts = {}
        self.e = 0  # 记录以该节点结尾的单词个数
        self.p = 0  # 记录经过该节点的单词总数


class Trie:
    def __init__(self):
        self.root = TrieNode()

    def insert(self, word: str) -> None:
        node = self.root
        node.p += 1
        for char in word:
            if char not in node.nexts:
                node.nexts[char] = TrieNode()
            node = node.nexts[char]
            node.p += 1
        node.e += 1

    # 查询前缀树里word单词出现了几次
    def countWordsEqualTo(self, word: str) -> int:
        node = self.root
        for char in word:
            if char not in node.nexts:
                return 0
            node = node.nexts[char]
        return node.e

    # 查询前缀树里以prefix为前缀的单词出现了几次
    def countWordsStartingWith(self, prefix: str) -> int:
        node = self.root
        for char in prefix:
            if char not in node.nexts:
                return 0
            node = node.nexts[char]
        return node.p

    # 如果此前word插入过,删掉一次
    def erase(self, word: str) -> None:
        if self.countWordsEqualTo(word) > 0:
            node = self.root
            node.p -= 1
            for char in word:
                node.nexts[char].p -= 1
                if node.nexts[char].p == 0:
                    del node.nexts[char]
                    return
                node = node.nexts[char]
            node.e -= 1

my_trie = Trie()

for line in sys.stdin:
    a = line.split()
    if len(a) > 1:
        op, word = a[0], a[1]
        if op == '1':
            my_trie.insert(word)
        if op == '2':
            my_trie.erase(word)
        if op == '3':
            if my_trie.countWordsEqualTo(word) > 0:
                print("YES")
            else:
                print("NO")
        if op == '4':
            print(my_trie.countWordsStartingWith(word))