import std.stdio;
import std.string;
import std.conv;
import std.array;
import std.typecons;
import std.algorithm;

alias Tuple!(int, "id", int, "count", bool, "prev") Trade;

void main() {
    Trade[] tradeList;

    // 先月の取引を取り込む
    tradeList = inputTradeList(tradeList);

    foreach (ref prevTrade; tradeList) prevTrade.prev = true;

    // 今月の取引を取り込む
    tradeList = inputTradeList(tradeList);

    // idで昇順に整列
    sort!("a.id < b.id")(tradeList);

    /*
     * 1. prevフラグがtrue（先月に取引がある）
     * 2. 取引回数が1より大きい（2回以上の取引がある）
     * 上記の条件を満たす取引を出力
     */
    foreach (trade; tradeList) {
        if (trade.count > 1 && trade.prev) {
            writeln(join([trade.id.to!string, trade.count.to!string], " "));
        }
    }
}

/*
 * 標準入力から取引のデータを取り込み、リストに登録する。
 * 入力の長さが0の場合、終了と見なす。
 */
Trade[] inputTradeList(Trade[] tradeList) {
    foreach (input; stdin.byLine) {
        if (input.length == 0) break;

        auto trade = input.split(",").map!(to!int);
        tradeList = addTradeList(trade[0], tradeList);
    }

    return tradeList;
}

/*
 * 取引履歴を走査し、同じ取引が
 * 1. あれば、その取引のcountをインクリメント
 * 2. なければ、取引履歴に追加
 */
Trade[] addTradeList(int tradeId, Trade[] prevTradeList) {
    foreach (ref prevTrade; prevTradeList) {
        if (tradeId == prevTrade.id) {
            prevTrade.count++;
            return prevTradeList;
        }
    }

    prevTradeList ~= Trade(tradeId, 1, false);
    return prevTradeList;
}