#include <bits/stdc++.h>
char s[524288], t[524288], rt[524288];
int b[524288], rb[524288];
int dp[524288];
int n, m, k;
void build(char *w, int *b) {
  b[0] = -1;
  int i = 0;
  while (w[i++]) {
    int k = b[i - 1];
    while (k != -1 && w[k] != w[i - 1]) k = b[k];
    b[i] = k + 1;
  }
}
int next(char *w, int *b, int k, char c) {
  while (k != -1 && w[k] != c) k = b[k];
  return ++k;
}
int main() {
  scanf("%d%d%d\n", &n, &m, &k);
  strtok(fgets(s, 524288, stdin), "\r\n");
  strtok(fgets(t, 524288, stdin), "\r\n");
  strcpy(rt, t), std::reverse(rt, rt + m);
  build(t, b);
  build(rt, rb);
  for (int i = n, p = 0; i >= k; p = next(rt, rb, p, s[--i]))
    if (i <= n - k)
      for (int q = p; !dp[m - q]; q = rb[q]) dp[m - q] = i;
  if (k >= m) {
    for (int i = 0, p = 0; i <= n; p = next(t, b, p, s[i++]))
      if (p == m) {
        int l = std::min(std::max(0, i - k), n - k * 2), r = l + k;
        printf("Yes\n%d %d\n", l + 1, r + 1);
        return 0;
      }
  }
  for (int i = 0, p = 0; i <= n; p = next(t, b, p, s[i++])) {
    while (p > k) p = b[p];
    0;
    if (i >= k && dp[p] >= i) {
      int l = i - k, r = dp[p];
      printf("Yes\n%d %d\n", l + 1, r + 1);
      return 0;
    }
  }
  puts("No");
  return 0;
}
