#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int n, k;
string s;
long long dig[10][MAXN];
long long inv[MAXN], C1[MAXN], C2[MAXN];
long long dp[10][MAXN];
inline long long add(long long x, long long y) {
  return (x + y >= 1000000007) ? x + y - 1000000007 : x + y;
}
inline long long sub(long long x, long long y) {
  return (x - y < 0) ? x - y + 1000000007 : x - y;
}
inline long long mul(long long x, long long y) { return (x * y) % 1000000007; }
int main() {
  scanf("%d%d", &n, &k);
  cin >> s;
  for (int i = 0; i < 10; i++) {
    dig[i][0] = i;
    for (int j = 1; j < MAXN; j++)
      dig[i][j] = (dig[i][j - 1] * 10) % 1000000007;
  }
  inv[1] = 1;
  for (int i = 2; i < MAXN; i++)
    inv[i] =
        (1000000007 - (1000000007 / i) * inv[1000000007 % i] % 1000000007) %
        1000000007;
  memset(C1, 0, sizeof C1);
  memset(C2, 0, sizeof C2);
  C1[k - 1] = 1;
  C2[k] = 1;
  for (int i = k; i < MAXN; i++) {
    C1[i] = (((C1[i - 1] * i) % 1000000007) * inv[i - k + 1]) % 1000000007;
    if (i >= k + 1)
      C2[i] = (((C2[i - 1] * i) % 1000000007) * inv[i - k]) % 1000000007;
  }
  memset(dp, 0, sizeof dp);
  long long res = 0;
  for (int j = 0; j < n; j++) {
    for (int i = 0; i < 10; i++) {
      if (j == 0) {
        dp[i][j] = mul(C2[n - 1], dig[i][0]);
      } else if (n - j - 1 >= 0) {
        dp[i][j] = add(add(sub(dp[i][j - 1], mul(C2[n - j], dig[i][j - 1])),
                           mul(C1[n - j - 1], dig[i][j - 1])),
                       mul(C2[n - j - 1], dig[i][j]));
      }
    }
    res = add(res, dp[s[n - 1 - j] - '0'][j]);
  }
  printf("%I64d\n", res);
  return 0;
}
