#include #include #include #include #include #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } typedef long long ll; const int maxn=110; char ch[maxn]; struct PAM { int to[maxn][26],f[maxn],l[maxn],s[maxn],last,cnt; void init() { memset(to,0,sizeof(to)); memset(f,0,sizeof(f)); memset(l,0,sizeof(l)); memset(s,0,sizeof(s)); last=0;l[1]=-1;cnt=f[0]=1; } void extend(int c,int n) { int p=last; while(ch[n]!=ch[n-l[p]-1]) p=f[p]; if(!to[p][c]) { int np=++cnt,k=f[p];l[np]=l[p]+2; while(ch[n]!=ch[n-l[k]-1]) k=f[k]; f[np]=to[k][c];to[p][c]=np; } s[last=to[p][c]]++; } void build() { dwn(i,cnt,1) s[f[i]]+=s[i]; } }T; int A[maxn]; bitsetf[maxn][maxn]; void solve() { int n=read(),K=read(),l=read(); memset(A,0,sizeof(A)); rep(i,1,n) { scanf("%s",ch+1);T.init(); for(int j=1;ch[j];j++) T.extend(ch[j]-'a',j); T.build();rep(j,2,T.cnt) A[T.l[j]]+=T.s[j]; } memset(f,0,sizeof(f)); f[0][0][0]=1; rep(k,1,l) rep(i,0,K) { f[k][i]|=f[k-1][i]; dwn(j,min(i,A[k]),1) if(j*k<=l) f[k][i]|=(f[k-1][i-j]<<(j*k)); } puts(f[l][K][l]?"True":"False"); } int main() { dwn(T,read(),1) solve(); return 0; } /* 3 2 3 7 yjqqaq claris 2 2 7 popoqqq fwwf 1 3 3 aaa */