#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
int n, k;
char str[100005];
long long jie[100005];
long long ni[100005];
long long sum[100005];
long long extend_gcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  }
  long long gcd = extend_gcd(b, a % b, x, y);
  long long t = x;
  x = y;
  y = t - a / b * x;
  return gcd;
}
long long Get_Inverse(long long num) {
  long long x, y;
  extend_gcd(num, 1000000007, x, y);
  return (x % 1000000007 + 1000000007) % 1000000007;
}
void init() {
  jie[0] = jie[1] = 1;
  ni[0] = ni[1] = 1;
  for (int i = 2; i <= 100000; i++) {
    jie[i] = (jie[i - 1] * i) % 1000000007;
    ni[i] = Get_Inverse(jie[i]);
  }
}
long long cal(int n, int m) {
  if (n < m) return 0;
  return jie[n] * ni[n - m] % 1000000007 * ni[m] % 1000000007;
}
int main(void) {
  init();
  scanf("%d%d", &n, &k);
  scanf("%s", str + 1);
  long long ans = 0;
  long long ten = 1;
  for (int i = 1; i <= n; i++) {
    sum[i] =
        (sum[i - 1] + ten * cal(n - i - 1, k - 1) % 1000000007) % 1000000007;
    ten = ten * 10 % 1000000007;
  }
  ten = 1;
  for (int i = n; i >= 1; i--) {
    int c = str[i] - '0';
    ans += c * ten % 1000000007 * cal(i - 1, k) % 1000000007;
    ans += c * sum[n - i] % 1000000007;
    ans %= 1000000007;
    ten = ten * 10 % 1000000007;
  }
  printf("%I64d\n", ans);
  return 0;
}
