# -*- coding: utf-8 -*-

"""
    Домашня робота №10
    Тема: "multiplicity"
    Студент: Козирєв Антон Юрійович
    Група: КМ - 62
"""

#Task_1----------------------------------------------------#

"""
    Условие
    Дан список чисел. Определите, сколько в нем встречается различных чисел.
    Примечание. Эту задачу на Питоне можно решить в одну строчку.
"""

print(len(set(input().split())))

#----------------------------------------------------------#

#Task_2----------------------------------------------------#

"""
    Условие
    Даны два списка чисел. Посчитайте, сколько чисел содержится одновременно как в первом списке, так и во втором.
    Примечание. Эту задачу на Питоне можно решить в одну строчку.
"""

print(len(set(input().split()).intersection(set(input().split())))) #To get same elements we use "intersection math function" 

#----------------------------------------------------------#

#Task_3----------------------------------------------------#

"""
    Условие
    Даны два списка чисел. Найдите все числа, которые входят как в первый, так и во второй список и выведите их в порядке возрастания.
    Примечание. И даже эту задачу на Питоне можно решить в одну строчку.
"""

print(' '.join(sorted(list(set(input().split()).intersection(set(input().split())))))) #Convert 'set' into 'list' for using 'sorted()' function

#----------------------------------------------------------#

#Task_4----------------------------------------------------#

"""
    Условие
    Во входной строке записана последовательность чисел через пробел.
    Для каждого числа выведите слово YES (в отдельной строке), если это число ранее встречалось в последовательности или NO, если не встречалось.
"""

List = input().split()
Set = set([])
for element in List:
    if element not in Set:
        print("NO")
        Set.add(element) # add element to compare with next element
    else:
        print("YES")

#----------------------------------------------------------#

#Task_5----------------------------------------------------#

"""
    Условие
    Аня и Боря любят играть в разноцветные кубики, причем у каждого из них свой набор и в каждом наборе все кубики различны по цвету.
    Однажды дети заинтересовались, сколько существуют цветов таких, что кубики каждого цвета присутствуют в обоих наборах.
    Для этого они занумеровали все цвета случайными числами от 0 до 108. На этом их энтузиазм иссяк, поэтому вам предлагается помочь им в оставшейся части.
    В первой строке входных данных записаны числа N и M — число кубиков у Ани и Бори.
    В следующих N строках заданы номера цветов кубиков Ани.
    В последних M строках номера цветов Бори.
    Найдите три множества: номера цветов кубиков, которые есть в обоих наборах; номера цветов кубиков, которые есть только у Ани и номера цветов кубиков, которые есть только у Бори. Для каждого из множеств выведите сначала количество элементов в нем, а затем сами элементы, отсортированные по возрастанию.
"""

String_lens = input().split()
N_colors = int(String_lens[0])
M_colors = int(String_lens[1])

Colors_List_N = [input() for i in range(N_colors)]
Colors_List_M = [input() for j in range(M_colors)]

print(len(set(Colors_List_N).intersection(set(Colors_List_M)))) #To get same elements we use "intersection math function"
print(' '.join(sorted(list(set(Colors_List_N).intersection(set(Colors_List_M))))))

print(len(set(Colors_List_N).difference(set(Colors_List_M))))
print(' '.join(sorted(list(set(Colors_List_N).difference(set(Colors_List_M))))))

print(len(set(Colors_List_M).difference(set(Colors_List_N))))
print(' '.join(sorted(list(set(Colors_List_M).difference(set(Colors_List_N))))))

#----------------------------------------------------------#

#Task_6----------------------------------------------------#

"""
    Условие
    Дан текст: в первой строке записано число строк, далее идут сами строки. Определите, сколько различных слов содержится в этом тексте.
    Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.
"""

Count_of_strings = int(input())
List = []
for i in range(Count_of_strings):
    for element in input().split():
        List.append(element)
        
print(len(set(List)))

#----------------------------------------------------------#

#Task_7----------------------------------------------------#

"""
    Условие
    Август и Беатриса играют в игру. Август загадал натуральное число от 1 до n. Беатриса пытается угадать это число, для этого она называет некоторые множества натуральных чисел. Август отвечает Беатрисе YES, если среди названных ей чисел есть задуманное или NO в противном случае. После нескольких заданныъх вопросов Беатриса запуталась в том, какие вопросы она задавала и какие ответы получила и просит вас помочь ей определить, какие числа мог задумать Август.
    В первой строке задано n - максимальное число, которое мог загадать Август. Далее каждая строка содержит вопрос Беатрисы (множество чисел, разделенных пробелом) и ответ Августа на этот вопрос.
    Вы должны вывести через пробел, в порядке возрастания, все числа, которые мог задумать Август.
"""

Maximum_number = int(input())
answer = ""
Set = set([])
ask = [""]

while True:
    ask = input().split()
    if ask[0] == "HELP":
        break
    answer = str(input())
    if answer == "YES":
        Set.update(set(ask))
    else:
        Set.difference_update(set(ask))
        
print(' '.join(sorted(list(Set))))

#----------------------------------------------------------#

#Task_8----------------------------------------------------#

"""
    Условие
    Август и Беатриса продолжают играть в игру, но Август начал жульничать.
    На каждый из вопросов Беатрисы он выбирает такой вариант ответа YES или NO, чтобы множество возможных задуманных чисел оставалось как можно больше.
    Например, если Август задумал число от 1 до 5, а Беатриса спросила про числа 1 и 2, то Август ответит NO, а если Беатриса спросит про 1, 2, 3, то Август ответит YES.
    Если же Бетриса в своем вопросе перечисляет ровно половину из задуманных чисел, то Август из вредности всегда отвечает NO.
    Наконец, Август при ответе учитывает все предыдущие вопросы Беатрисы и свои ответы на них, то есть множество возможных задуманных чисел уменьшается.
    Первая строка содержит наибольшее число, которое мог загадать Август. Каждая следующая строка содержит очередной вопрос Беатрисы: набор чисел, разделенных пробелами. Последняя строка входных данных содержит одно слово HELP.
    Для каждого вопроса Беатрисы выведите ответ Августа на этот вопрос.
    После этого выведите через пробел, в порядке возрастания, все числа, которые мог загадать Август после ответа на все вопросы Беатрисы.
"""

Set = set([])
ask = [""]

Set_biggest_number = (set(range(int(input()) + 1)))
Set_biggest_number.remove(0)

while True:
    asked_numbers = input().split()
    if asked_numbers[0] == "HELP":
        break
    possible_numbers = set(asked_numbers).difference(Set_biggest_number)
    if len(possible_numbers) == len(set(asked_numbers)):
        print("NO")
    else:
        print("YES")
    Set_biggest_number = possible_numbers
    
        
print(' '.join(sorted(list(Set_biggest_number))))

#----------------------------------------------------------#

#Task_9----------------------------------------------------#

"""
    Условие
    Каждый из некоторого множества школьников некоторой школы знает некоторое количество языков.
    Нужно определить сколько языков знают все школьники, и сколько языков знает хотя бы один из школьников.
    В первой строке задано количество школьников.
    Для каждого из школьников сперва записано количество языков, которое он знает, а затем - названия языков, по одному в строке.
    В первой строке выведите количество языков, которые знаю все школьники.
    Начиная со второй строки - список таких языков.
    Затем - количество языков, которые знает хотя бы один школьник, на следующих строках - список таких языков.
    Языки нужно выводить в лексикографическом порядке, по одному на строке.
"""

Number_of_schollers = int(input())
Langs_all = set([])
Langs_unic = set([])

for i in range(Number_of_schollers):
    Count_of_languages = int(input())
    for j in range(Count_of_languages):
        Langs_all.add(input())
        Langs_unic = Langs_all.difference(Langs_unic)
        
print(len(Langs_unic))
for element in Langs_unic:
    print(element)
    
print(len(Langs_all))
for element in Langs_all:
    print(element) 

#----------------------------------------------------------#

#Task_10---------------------------------------------------#

"""
    Условие
    Политическая жизнь одной страны очень оживленная.
    В стране действует K политических партий, каждая из которых регулярно объявляет национальную забастовку.
    Дни, когда хотя бы одна из партий объявляет забастовку, при условии, что это не суббота или воскресенье (когда и так никто не работает), наносят большой ущерб экономике страны.
    i-я партия объявляет забастовки строго каждые b_i дней, начиная с дня с номером a_i.
    То есть i-я партия объявляет забастовки в дни a_i, a_i + b_i, a_i + 2 * b_i и т.д.
    Если в какой-то день несколько партий объявляет забастовку, то это считается одной общенациональной забастовкой.
    В календаре страны N дней, пронумерованных, начиная с единицы.
    Первый день года является понедельником, шестой и седьмой дни года — выходные, неделя состоит из семи дней.
    В первой строке даны числа N и K. Далее идет K строк, описывающие графики проведения забастовок.
    i-я строка содержит числа a_i и b_i. Вам нужно определить число забастовок, произошедших в этой стране в течении года.
"""

def get_protested_days(List, End_day): #List[0][i]
    Set = set([])
    Start_day = int(List[0])
    Step = int(List[1])
    count = 0
    while (End_day >= (Start_day + count * Step)):
        if ((Start_day + count * Step) % 6 != 0) and ((Start_day + count * Step) % 7 != 0):
            Set.add(str(Start_day + count * Step))
        count += 1
    return Set

Days_data = input().split()
N_Days = int(Days_data[0])
Graphics = []
Union_set = set([])

for i in range(int(Days_data[1])):
    Graphics.append(input().split())

for element in Graphics:
    Current_set = get_protested_days(element, N_Days)
    Union_set.update(Current_set)
    
print(len(Union_set))