const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
	// 获取4种类型的数量方法
    function getCount(map, type) {
        if (!map.get(type)) {
            map.set(type, 1);
        } else {
            map.set(type, map.get(type) + 1);
        }
    }
    // Write your code here
    while ((line = await readline())) {
        const len = line.length;
        let map = new Map();
		// 注意赋初始值
        map.set("String", 0);
        map.set("Blank", 0);
        map.set("Number", 0);
        map.set("Other", 0);
        for (let i = 0; i < len; i++) {
			// 注意 isNaN(' ') == false
            if (isNaN(line[i]) || line[i] == " ") {
                // 英文字符
                if (/[a-z|A-Z]/.test(line[i])) {
                    getCount(map, "String");
                } else if (/\s/.test(line[i])) {
                    // 空格字符
                    getCount(map, "Blank");
                } else {
                    getCount(map, "Other");
                }
            } else {
                // 数字
                getCount(map, "Number");
            }
        }
		// 注意换行写法
        console.log(
            map.get("String")+'\n'+
            map.get("Blank")+'\n'+
            map.get("Number")+'\n'+
            map.get("Other")
        );
    }
})();