#include <bits/stdc++.h>
using namespace std;
long long po[100010], repo[100010], po10[100010];
char str[100010];
int a[100010];
long long Pow(long long t, int k) {
  if (k == 0) return 1;
  long long w = Pow(t, k / 2);
  w = w * w % 1000000007;
  if (k & 1) w = w * t % 1000000007;
  return w;
}
long long rev(long long t) { return Pow(t, 1000000007 - 2); }
void Init() {
  po[0] = 1;
  for (int i = (1); i < (100010); i++) po[i] = po[i - 1] * i % 1000000007;
  for (int i = (0); i < (100010); i++) repo[i] = rev(po[i]);
  po10[0] = 1;
  for (int i = (1); i < (100010); i++) po10[i] = po10[i - 1] * 10 % 1000000007;
  return;
}
long long C(int n, int k) {
  if (k > n) return 0;
  long long res = po[n] * repo[k] % 1000000007;
  res = res * repo[n - k] % 1000000007;
  return res;
}
long long sum[100010];
int main() {
  long long ans = 0, res;
  int N, K, val;
  Init();
  scanf("%d%d", &N, &K);
  scanf("%s", str);
  for (int i = (0); i < (N); i++) a[i] = str[i] - '0';
  sum[0] = a[0];
  for (int i = (1); i < (N); i++) sum[i] = sum[i - 1] + a[i];
  if (K == 0) {
    ans = 0;
    for (int i = (0); i < (N); i++) ans = (ans * 10 + a[i]) % 1000000007;
    printf("%I64d\n", ans);
    return 0;
  }
  for (int x = (1); x < (N + 1); x++) {
    if (x < N)
      val = sum[N - x - 1];
    else
      val = 0;
    res = val * C(N - x - 1, K - 1) % 1000000007 * po10[x - 1] % 1000000007;
    res += a[N - x] * po10[x - 1] % 1000000007 * C(N - x, K) % 1000000007;
    ans = (ans + res) % 1000000007;
  }
  printf("%I64d\n", ans);
  return 0;
}
