#include<bits/stdc++.h>
using namespace std;
constexpr int MN=1e6+15;
int n,k1,k2,st[MN],top,L[MN];
unsigned ans,f[MN],sum[MN][30];
string s;
namespace SA{
int len,sa[MN],x[MN],y[MN],rk[MN],c[MN],ht[MN];
template<typename vct>
void getsa(vct s){
int m=256;
len=s.size();
s.insert(s.begin(),' ');
for(int i=1;i<=len;i++){
x[i]=s[i];
++c[x[i]];
}
for(int i=1;i<=m;i++) c[i]+=c[i-1];
for(int i=len;i>=1;i--) sa[c[x[i]]--]=i;
for(int k=1;k<=len;k<<=1){
int num=0;
for(int i=len-k+1;i<=len;i++) y[++num]=i;
for(int i=1;i<=len;i++){
if(sa[i]>k) y[++num]=sa[i]-k;
}
for(int i=1;i<=m;i++) c[i]=0;
for(int i=1;i<=len;i++) c[x[i]]++;
for(int i=1;i<=m;i++) c[i]+=c[i-1];
for(int i=len;i>=1;i--) sa[c[x[y[i]]]--]=y[i],y[i]=0;
swap(x,y);
num=1,x[sa[1]]=1;
for(int i=2;i<=len;i++){
if(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k]) x[sa[i]]=num;
else x[sa[i]]=++num;
}
if(num==len) break;
m=num;
}
for(int i=1;i<=len;i++) rk[sa[i]]=i;
for(int i=1,k=0;i<=len;i++){
if(rk[i]==1) continue;
if(k) k--;
int j=sa[rk[i]-1];
while(i+k<len&&j+k<len&&s[i+k]==s[j+k]) k++;
ht[rk[i]]=k;
}
}
} using namespace SA;
int calc1(int x){
return x*(x+1)/2;
}
int calc2(int x){
return x*(x+1)*(x-1)/3;
}
int main(){
cin>>s>>k1>>k2;
n=s.length();
getsa(s);
for(int i=1;i<=n;i++){
int l=max(i-k1+1,1),r=min(k2,i);
if(l<=r) f[i]=i*(calc1(r)-calc1(l-1))-(calc2(r)-calc2(l-1));
}
for(int i=1;i<=n;i++){
for(int j=0;j<26;j++) sum[i][j]=sum[i-1][j];
if(sa[i]!=1) sum[i][s[sa[i]-1]-'a']++;
}
for(int i=1;i<=n;i++){
while(top&&ht[i]<ht[st[top]]){
unsigned ret=0;
for(int j=0;j<26;j++){
ret+=(sum[st[top]-1][j]-sum[st[top]-L[st[top]]-1][j])*(sum[st[top]+L[i]][j]-sum[st[top]-1][j]);
}
ans+=f[ht[st[top]]]*((L[st[top]])*(L[i]+1)-ret);
L[i]+=L[st[top]];
top--;
}
st[++top]=i;
L[i]++;
}
while(top){
unsigned ret=0;
for(int j=0;j<26;j++){
ret+=(sum[st[top]-1][j]-sum[st[top]-L[st[top]]-1][j])*(sum[st[top]+L[n+1]][j]-sum[st[top]-1][j]);
}
ans+=f[ht[st[top]]]*((L[st[top]])*(L[n+1]+1)-ret);
L[n+1]+=L[st[top]];
top--;
}
cout<<ans;
return 0;
}