#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int compare(const void *a, const void *b) {
    return strcmp((char *)a, (char *)b);
}

int main() {
    int n;
    scanf("%d", &n);
    char str[n][11];
    for(int i = 0; i < n; i++) {
        scanf("%s", str[i]);
    }
    char x[11];
    int k;
    scanf("%s %d", x, &k);

    // printf("k's value is %d\n", k);
    int countX[26] = {0};
    int lenX = strlen(x);
    char brothers[n][11];
    // char newstr[n][11];
    int m = 0;
    // int newstrIndex = 0;
    // 重新排列str,去重储存到newstr中
    qsort(str, n, sizeof(str[0]), compare);
    // strcpy(newstr[newstrIndex++], str[0]);
    // for(int i = 1; i < n; i++) {
    //     if(!(strcmp(str[i],str[i-1]) == 0)) {
    //         strcpy(newstr[newstrIndex++], str[i]);
            // printf("%s\n", newstr[newstrIndex-2]);
    //     }
    // }
    // printf("x is %s\n", x);
    // 遍历x,统计字母数量
    for(int i = 0; i < lenX; i++) {
        if(islower(x[i])) {
            countX[x[i] - 'a']++;
            // printf("countX plus one\n");
        } else if(isupper(x[i])) {
            countX[x[i] - 'A']++;
        }
    }
    
    // 遍历newstr
    for(int i = 0; i < n; i++) {
        int countY[26] = {0};
        int lenY = strlen(str[i]);
        for(int j = 0; j < lenY; j++) {
            if(islower(str[i][j])) {
                countY[str[i][j] - 'a']++;
            } else if(isupper(str[i][j])) {
                countY[str[i][j] - 'A']++;
            }
        }
        int valid = 1;
        for(int j = 0; j < 26; j++) {
            if(countX[j] != countY[j]) {
                valid = 0;
                break;
            }
        }
        if(valid) {
            if(!(strcmp(str[i], x) == 0))
            strcpy(brothers[m++], str[i]);
        }
    }
    printf("%d\n", m);
    // for(int i = 0; i < m; i++) {
    //     printf("%s\n", brothers[i]);
    // }
    if(m > 0) printf("%s\n", brothers[k - 1]);
}