#include <bits/stdc++.h>
using namespace std;
const int M = 1000000007;
int n, k;
char s[100001];
int f[100001] = {1}, cs[100001];
int Pow(int b, int p) {
  if (!p) return 1;
  long long z = Pow(b, p / 2);
  if (p & 1) return z * z % M * b % M;
  return z * z % M;
}
int main() {
  scanf("%d%d%s", &n, &k, s);
  if (k == 0) {
    long long res = 0;
    for (int i = 0; i < n; ++i) res = (res * 10 + s[i] - '0') % M;
    printf("%lld\n", res);
    return 0;
  }
  for (int i = 1; i < 100001; ++i) f[i] = (long long)i * f[i - 1] % M;
  for (int i = 0; i < 100001; ++i) {
    if (n - i - 2 - k + 1 >= 0 && n - i - 2 >= 0 && n - i - 2 >= k - 1)
      cs[i] = Pow(10, i) * (long long)f[n - i - 2] % M * Pow(f[k - 1], M - 2) %
              M * Pow(f[n - i - 2 - k + 1], M - 2) % M;
    if (i) cs[i] += cs[i - 1];
    cs[i] %= M;
  }
  long long res = 0;
  for (int i = 0; i < n; ++i) {
    long long d = s[i] - '0';
    int rem = max(0, n - i - 1 - max(0, k - i - 1));
    if (rem) res = (res + d * cs[rem - 1]) % M;
    if (i >= k)
      res = (res + d * Pow(10, n - i - 1) % M * f[i] % M * Pow(f[k], M - 2) %
                       M * Pow(f[i - k], M - 2)) %
            M;
  }
  printf("%lld\n", res);
  return 0;
}
