#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int N = 1e5 + 5;
int n, k;
char s[N];
int a[N];
long long po[N], C[N], sum[N], D[N];
void gcd(long long a, long long b, long long& d, long long& x, long long& y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    gcd(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long inv(long long a, long long n) {
  long long d, x, y;
  gcd(a, n, d, x, y);
  return d == 1 ? (x + n) % n : -1;
}
int main() {
  po[0] = 1;
  for (int i = 1; i <= N - 1; i++) po[i] = po[i - 1] * 10 % mod;
  while (~scanf("%d%d", &n, &k)) {
    scanf("%s", s);
    int len = strlen(s);
    for (int i = 0; i < len; i++) a[i] = s[i] - '0';
    memset(C, 0, sizeof(C));
    C[k] = 1;
    for (int i = k + 1; i <= n; i++) {
      C[i] = C[i - 1] * i % mod;
      long long tp = inv((long long)i - k, mod);
      C[i] = (C[i] * tp) % mod;
    }
    long long ans = 0;
    for (int i = 0; i < n; i++) {
      long long tp = a[i] * po[n - 1 - i] % mod;
      tp = tp * C[i] % mod;
      ans = (ans + tp) % mod;
    }
    if (k == 0) {
      printf("%I64d\n", ans);
      continue;
    }
    k--;
    C[k] = 1;
    for (int i = k + 1; i <= n; i++) {
      C[i] = C[i - 1] * i % mod;
      long long tp = inv((long long)i - k, mod);
      C[i] = (C[i] * tp) % mod;
    }
    for (int i = 0; i <= n - 2; i++) {
      D[i] = po[i] * C[n - i - 2] % mod;
      if (i == 0)
        sum[i] = D[i];
      else
        sum[i] = (sum[i - 1] + D[i]) % mod;
    }
    for (int i = 0; i < n; i++) {
      if (n - 2 - i < 0) continue;
      long long tp = sum[n - 2 - i];
      ans = (ans + tp * a[i]) % mod;
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
