/* 
    用map记录x每一个字符出现的频数
    先比较两个字符串是否长度不同或值不同
    再比较相应的map是否相同
 */
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)

func check(s string, mp map[byte]int) bool {
    var mp_ = make(map[byte]int)
    for i:=0;i<len(s);i++{
        mp_[s[i]]++
    }
    for k, v := range mp {
        if mp_[k] != v{
            return false
        }
    }
    return true
}

func main() {
    var n int
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    parts := strings.Split(scanner.Text(), " ")
    n, _ = strconv.Atoi(parts[0])
    a := parts[1:n+1]
    length := len(parts)
    x := parts[length-2]
    k, _ := strconv.Atoi(parts[length-1])

    var mp_x = make(map[byte]int)
    var result = make([]string, 0)
    for i:=0;i<len(x);i++{
        mp_x[x[i]]++
    }
    for i:=0;i<len(a);i++{
        if len(a[i])!= len(x) || a[i] == x{
            continue
        }
        if check(a[i], mp_x) {
            result = append(result, a[i])
        }
    }
    sort.Strings(result)
    fmt.Println(len(result))
    if k-1 < len(result){
        fmt.Println(result[k-1])
    }
}