#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int N = 250;
vector<int> g[N];
int mpow(int base, int exp);
void ipgraph(int n, int m);
void dfs(int u, int par);
int mark[N], a, b, n, dp[N][N];
bool go(int pos, int len) {
  int i;
  if (pos == n and len == 0) return 1;
  if (pos >= n) return 0;
  int &ans = dp[pos][len];
  if (ans != -1) return ans;
  if (mark[pos]) return 1;
  for (i = pos + a - 1; pos + a - 1 < pos + b ? i < pos + b : i > pos + b;
       pos + a - 1 < pos + b ? i += 1 : i -= 1) {
    if (go(i + 1, len - 1)) {
      mark[pos] = i;
      return ans = 1;
    }
  }
  return ans = 0;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int i, k, j;
  cin >> k >> a >> b;
  string s;
  cin >> s;
  n = s.size();
  for (i = 0; i < n; i++)
    for (j = 0; j < k + 1; j++) dp[i][j] = -1;
  i = 0;
  while (i < n) {
    if (!go(i, k--)) {
      cout << "No solution\n";
      return 0;
    };
    cout << s.substr(i, mark[i] - i + 1) << endl;
    i = mark[i] + 1;
  }
  return 0;
}
int mpow(int base, int exp) {
  base %= mod;
  int result = 1;
  while (exp > 0) {
    if (exp & 1) result = ((long long)result * base) % mod;
    base = ((long long)base * base) % mod;
    exp >>= 1;
  }
  return result;
}
void ipgraph(int n, int m) {
  int i, u, v;
  while (m--) {
    cin >> u >> v;
    g[u - 1].push_back(v - 1);
    g[v - 1].push_back(u - 1);
  }
}
void dfs(int u, int par) {
  for (int v : g[u]) {
    if (v == par) continue;
    dfs(v, u);
  }
}
