#include <iostream>
#include<string>
#include<map>
using namespace std;

// 扫描服务器IP时,依次对比是否存在相同的代理IP
// 当扫描到相同的时,标记该IP为true
// 代表 从头扫描到该服务器IP时,使用其他为false的ip,可以不用切换,
// 若全部都被标记,代表从头到现在,所有IP都会出现,必须要切换一次了
// 最后一个被标记的代理IP 就作为前面所使用的代理IP,切换IP时,其他代理IP变回false
// 以当前服务器IP为起点,再次访问


int main() {
    int n, m;
    cin >> n;
    map<string, bool> proxyIP;
    string temp;
    for (int i = 0; i < n; i++) {
        cin >> temp;
        proxyIP[temp] = false; // 记录各个代理IP是否被发现
    }

    cin >> m;
    string IP;
    int sum = 0;
    for (int i = 0; i < m; i++) {
        cin >> IP;
        if (proxyIP.count(IP)) { // 存在相同的代理IP
            if (proxyIP.size() == 1) { // 只有一个代理IP时,没有其他方案
                sum = -1;
                break;
            }
            proxyIP[IP] = true; // 标记已存在
            // 是否都已经出现
            bool all = true;
            for (auto it = proxyIP.begin(); it != proxyIP.end();it++) { // 利用迭代器进行遍历
                if ((*it).second == false) {
                    all = false;
                    break;
                }
            }
            if (all) {// 全都出现
                sum++;
                // 全都初始化
                for (auto it = proxyIP.begin(); it != proxyIP.end();it++) { // 利用迭代器进行遍历               
                        (*it).second=false;
                }
                proxyIP[IP]=true;// 当前代理IP记录为出现
            }
            
        }
    }
    cout<<sum<<endl;


}
// 64 位输出请用 printf("%lld")