#include <bits/stdc++.h>
using namespace std;
int n, m, k, len, f[1000005], g[1000005], w1[1000005], w2[1000005];
char s[1000005], t[1000005], str[1000005];
void get_next(char s[], int nxt[]) {
  int k = 0;
  nxt[1] = 0;
  for (int i = (2); i <= (len); i++) {
    while (k && s[k + 1] != s[i]) k = nxt[k];
    if (s[k + 1] == s[i])
      nxt[i] = ++k;
    else
      nxt[i] = k;
  }
}
int main() {
  scanf("%d%d%d%s%s", &n, &m, &k, s + 1, t + 1);
  if (k * 2 > n || k * 2 < m) {
    puts("No");
    exit(0);
  }
  len = 0;
  for (int i = (1); i <= (m); i++) str[++len] = t[i];
  str[++len] = '#';
  for (int i = (1); i <= (n); i++) str[++len] = s[i];
  get_next(str, f);
  len = 0;
  for (int i = (1); i <= (n); i++) str[++len] = s[i];
  str[++len] = '#';
  for (int i = (1); i <= (m); i++) str[++len] = t[i];
  reverse(str + 1, str + 1 + len);
  get_next(str, g);
  for (int i = (m + 2); i <= (n + m + 1); i++)
    if (f[i] >= m) {
      int p1 = i - m - 1;
      p1 = max(p1 - 2 * k, 0);
      printf("Yes\n%d %d\n", p1 + 1, p1 + 1 + k);
      exit(0);
    }
  for (int i = (0); i <= (n); i++) w1[i] = n + 1;
  for (int i = (m + 2); i <= (n + m + 1); i++) {
    if (i - m - 1 >= k) {
      int tmp = f[i];
      while (tmp) {
        if (i - m - 1 < w1[tmp])
          w1[tmp] = i - m - 1;
        else
          break;
        tmp = f[tmp];
      }
      tmp = g[i];
      while (tmp) {
        if (n - (i - m - 1) + 1 > w2[tmp])
          w2[tmp] = n - (i - m - 1) + 1;
        else
          break;
        tmp = g[tmp];
      }
    }
  }
  w1[0] = 0;
  w2[0] = n + 1;
  for (int i = (1); i <= (min(k, m)); i++) {
    if (m - i > k) continue;
    int p1 = w1[i] - k + 1, p2 = w2[m - i];
    if (p1 >= 1 && p2 + k - 1 <= n && w1[i] < p2) {
      printf("Yes\n%d %d\n", p1, p2);
      exit(0);
    }
  }
  puts("No");
}
