#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long maxn = 1e5 + 10;
long long N, K;
long long presum[maxn], v[maxn];
long long ck[maxn], ck1[maxn];
long long po10[maxn];
char ord[maxn];
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() {
  po10[0] = 1;
  for (int i = 1; i < maxn; i++) po10[i] = (po10[i - 1] * 10) % mod;
  while (~scanf("%I64d%I64d", &N, &K)) {
    scanf("%s", ord);
    presum[0] = ord[0] - '0';
    for (int i = 0; i < N; i++) {
      if (i > 0) presum[i] = (presum[i - 1] + ord[i] - '0') % mod;
      v[i] = ord[i] - '0';
    }
    ck[K] = 1;
    ck1[K - 1] = 1;
    for (int i = 0; i <= N; i++) {
      if (i >= K + 1) {
        ck[i] = (ck[i - 1] * i) % mod;
        long long tp = inv((long long)i - K, mod) % mod;
        ck[i] = (ck[i] * tp) % mod;
      }
      if (i < K) ck[i] = 0;
      if (i >= K) {
        ck1[i] = (ck1[i - 1] * i) % mod;
        long long tp = inv((long long)i - K + 1, mod) % mod;
        ck1[i] = (ck1[i] * tp) % mod;
      }
      if (i < K - 1) ck1[i] = 0;
    }
    long long ans = 0;
    for (int i = 0; i <= N - 1; i++) {
      long long tp = (po10[N - 1 - i] * ck[i]) % mod;
      ans = (ans % mod + (v[i] * tp) % mod) % mod;
    }
    for (int l = 0; l <= N - 2; l++) {
      long long tp = (ck1[N - l - 2] * presum[N - l - 2]) % mod;
      ans = (ans % mod + (po10[l] * tp) % mod) % mod;
    }
    printf("%I64d\n", ans % mod);
  }
  return 0;
}
