#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using pi = pair<int, int>;
template <class T>
bool ckmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
  return b > a ? a = b, 1 : 0;
}
void setIO(string name = "") {
  cin.tie(0)->sync_with_stdio(0);
  if (int((name).size())) {
    freopen((name + ".in").c_str(), "r", stdin);
    freopen((name + ".out").c_str(), "w", stdout);
  }
}
const string yes = "YES\n", no = "NO\n";
const int MOD = 1e9 + 7;
const int MX = 2e2 + 10;
const ll INF = 1e18;
const int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
const char dc[4] = {'D', 'R', 'U', 'L'};
string S;
int K, A, B;
bool dp[MX][MX];
vi ans;
int main() {
  setIO();
  cin >> K >> A >> B >> S;
  dp[0][0] = true;
  for (int i = 1; i <= K; ++i)
    for (int k = 1; k < MX; ++k)
      for (int j = A; j <= B; ++j)
        if (k - j >= 0) dp[i][k] |= dp[i - 1][k - j];
  if (dp[K][int((S).size())] == false) return cout << "No solution", 0;
  int num = K, sub = int((S).size());
  ans.push_back(sub);
  while (num && sub) {
    for (int i = A; i <= B; ++i) {
      if (sub - i >= 0 && dp[num - 1][sub - i]) {
        --num;
        ans.push_back(sub - i);
        sub -= i;
        break;
      }
    }
  }
  reverse(begin(ans), end(ans));
  for (int i = 0; i < int((ans).size()) - 1; ++i) {
    for (int j = ans[i]; j < ans[i + 1]; ++j) {
      cout << S[j];
    }
    cout << "\n";
  }
  return 0;
}
