#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int N = 1e6 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;
int n, t, k, tot = 1, lst = 1;
int tr[N][26], len[N], dad[N], cnt[N];
LL f[N];
vector<int> e[N];
void extend(int c)
{
int cur = ++ tot, p = lst;
len[cur] = len[lst] + 1, cnt[cur] = 1;
for( ; p && !tr[p][c]; p = dad[p]) tr[p][c] = cur;
if(!p) dad[cur] = 1;
else
{
int q = tr[p][c];
if(len[p] + 1 == len[q]) dad[cur] = q;
else
{
int clone = ++ tot;
len[clone] = len[p] + 1, dad[clone] = dad[q], dad[q] = clone, dad[cur] = clone;
for( ; p && tr[p][c] == q; p = dad[p]) tr[p][c] = clone;
memcpy(tr[clone], tr[q], sizeof tr[q]);
}
}
lst = cur;
}
void dfs1(int u)
{
for(int v : e[u])
{
dfs1(v);
cnt[u] += cnt[v];
}
}
void dfs2(int u)
{
if(f[u]) return;
if(!t) cnt[u] = 1;
if(u != 1) f[u] = cnt[u];
for(int i = 0; i < 26; i ++)
{
int v = tr[u][i];
if(v)
{
dfs2(v);
f[u] += f[v];
}
}
}
void dfs3(int u, int k)
{
if(!k)
{
cout << endl;
return;
}
for(int i = 0; i < 26; i ++)
{
int v = tr[u][i];
if(v)
{
if(k > f[v]) k -= f[v];
else
{
cout << (char)('a' + i);
dfs3(v, k - cnt[v]);
return;
}
}
}
}
void solve()
{
string s;
cin >> s >> t >> k;
for(auto c : s) extend(c - 'a');
for(int i = 1; i <= tot; i ++) e[dad[i]].push_back(i);
dfs1(1);
dfs2(1);
if(k > f[1]) cout << -1 << endl;
else dfs3(1, k);
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T = 1;
// cin >> T;
while(T --) solve();
return 0;
}