/*
 * Author       : YangDavid
 * Created Time : 2020.12.08 00:06:54
 */

#include<bits/stdc++.h>
#define rep(i, n) for(int i = 1; i <= n; ++i)
#define all(x) begin(x), end(x)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int MAXN = 5050, MS = 1<<20, SIGMA = 20;
int n, a, b, cid[MAXN], tot = -1, L[MS], R[MS], cnt[MS], locc[SIGMA], rocc[SIGMA], cc[SIGMA];
char chr[MAXN], s[MAXN];
bitset<MS> dp;
int main() {
	memset(cid, -1, sizeof cid);
	scanf("%d%d%d%s", &n, &a, &b, s);
	for(int i = 0; i < n; ++i) {
		if(cid[s[i]] == -1) {
			cid[s[i]] = ++tot;
			chr[tot] = s[i];
		}
		s[i] = cid[s[i]];
		rocc[s[i]] = i;
	}
	for(int i = n-1; i >= 0; --i)
		locc[s[i]] = i, cc[s[i]]++;

	dp[0] = true, L[0] = 1e9, R[0] = 0;
	int ful = (1 << (tot+1)) - 1;
	for(int S = 1; S <= ful; ++S) {
		int x = S&-S, tz = __builtin_ctz(x);
		L[S] = min(L[S^x], locc[tz]);
		R[S] = max(R[S^x], rocc[tz]);
		cnt[S] = cnt[S^x] + cc[tz];
		bool nrt = 1LL * a * (R[S]-L[S]+1) > 1LL * b * cnt[S];
		if(!nrt) for(int i = 0; i <= tot; ++i) if((S>>i&1) && dp[S^(1<<i)]) {
			dp[S] = true;
			break;
		}
		if(dp[S]) continue;
		int lf = 0;
		for(int i = 0; i <= tot; ++i) if(S>>i&1) {
			lf |= 1<<i;
			if(dp[lf] && dp[S^lf]) {
				dp[S] = true;
				break;
			}
		}
	}
	string ans;
	for(int i = 0; i <= tot; ++i) if(dp[ful-(1<<i)])
		ans.push_back(chr[i]);
	sort(all(ans));
	printf("%d", (int)ans.length());
	for(auto g : ans)
		printf(" %c", g);

	return 0;
}

