#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
const int MAXN = 100005;
char a[MAXN];
int rev(int x, int n) {
  int ans = 1;
  int temp = x;
  while (n) {
    if ((n & 1) > 0) ans = (long long)ans * temp % MOD;
    temp = (long long)temp * temp % MOD;
    n >>= 1;
  }
  return ans;
}
int call(int n, int k) {
  int b = 1;
  int a = 1;
  for (int i = 0; i < k; i++) b = (long long)b * (n - i) % MOD;
  for (int i = 1; i <= k; i++) a = (long long)a * i % MOD;
  return (long long)b * rev(a, MOD - 2) % MOD;
}
int add(int x, int y) {
  x += y;
  if (x >= MOD) x -= MOD;
  return x;
}
int sub(int x, int y) {
  x -= y;
  if (x < 0) x += MOD;
  return x;
}
int main() {
  int n, k, ans = 0;
  scanf("%d%d", &n, &k);
  scanf("%s", a);
  if (k == 0) {
    for (int i = 0; i < n; i++)
      ans = add((long long)ans * 10 % MOD, (a[i] - '0'));
    printf("%d\n", ans);
    return 0;
  }
  int res = 0;
  int po = 1;
  int po2 = 1;
  int val1 = call(n - 1, k);
  int val2 = call(n - 2, k - 1);
  int val3 = call(n - 1, k);
  int flag = 1;
  for (int i = 1; i <= n; i++) {
    int d = a[n - i] - '0';
    if (i > 1 && (n - i >= k || flag)) {
      if (n - i < k) flag = 0;
      res = sub(res, (long long)po2 * val1 % MOD);
      res = add(res, (long long)po2 * val2 % MOD);
      po2 = (long long)po2 * 10 % MOD;
      val1 = (long long)val1 * rev(n - i + 1, MOD - 2) % MOD;
      val1 = (long long)val1 * (n - i + 1 - k) % MOD;
      val2 = (long long)val2 * rev(n - i, MOD - 2) % MOD;
      val2 = (long long)val2 * (n - i - k + 1) % MOD;
    }
    if (n - i >= k) res = add(res, (long long)po * val3 % MOD);
    po = (long long)po * 10 % MOD;
    val3 = (long long)val3 * rev(n - i, MOD - 2) % MOD;
    val3 = (long long)val3 * (n - i - k) % MOD;
    ans = add(ans, (long long)d * res % MOD);
  }
  printf("%d\n", ans);
  return 0;
}
