#include <bits/stdc++.h>
using namespace std;
int n, m, k, lpos[500010], rpos[500010];
char s[500010], t[500010];
struct String_Hash {
  unsigned long long Hs[500010], hs[500010], p[500010], P[500010];
  void ins(char *s) {
    p[0] = P[0] = 1;
    Hs[0] = hs[0] = s[0] - 'a';
    for (int i = 1; s[i]; i++) {
      Hs[i] = Hs[i - 1] * 29 + s[i] - 'a';
      hs[i] = hs[i - 1] * 17 + s[i] - 'a';
      P[i] = P[i - 1] * 29;
      p[i] = p[i - 1] * 17;
    }
  }
  pair<unsigned long long, unsigned long long> Hash(int l, int r) {
    unsigned long long tmp1 = Hs[r], tmp2 = hs[r];
    tmp1 -= Hs[l - 1] * P[r - l + 1];
    tmp2 -= hs[l - 1] * p[r - l + 1];
    return make_pair(tmp1, tmp2);
  }
} S, T;
void solve(int &l, int &r, int &flag) {
  int pos = 0;
  for (int i = 0; i < m && i < k; i++) {
    while (pos < i) pos++;
    for (; pos < n; pos++)
      if (S.Hash(pos - i, pos) == T.Hash(0, i)) break;
  }
  if (pos + k < n) {
    flag = 1, l = max(1, pos - k + 1);
    r = max(pos, k - 1) + 2;
    return;
  }
  pos = n - 1;
  for (int i = 0; i < m && i < k; i++) {
    while (n - pos < i) pos--;
    for (; pos >= 0; pos--)
      if (S.Hash(pos, pos + i) == T.Hash(m - 1 - i, m - 1)) break;
  }
  if (pos - k >= 0) {
    flag = 1, l = min(n - k, pos) - k + 1;
    r = min(n - k, pos) + 1;
    return;
  }
}
int main() {
  cin >> n >> m >> k;
  scanf("%s%s", s, t);
  S.ins(s);
  T.ins(t);
  memset(lpos, -1, sizeof(lpos));
  memset(rpos, -1, sizeof(rpos));
  int pos = k - 1;
  for (int i = 0; i < m && i < k; i++) {
    while (pos < i) pos++;
    for (; pos < n; pos++)
      if (S.Hash(pos - i, pos) == T.Hash(0, i)) break;
    if (S.Hash(k - i - 1, k - 1) == T.Hash(0, i)) pos = k - 1;
    lpos[i] = pos;
  }
  pos = n - k;
  for (int i = 0; i < m && i < k; i++) {
    while (n - pos < i) pos--;
    for (; pos >= 0; pos--)
      if (S.Hash(pos, pos + i) == T.Hash(m - 1 - i, m - 1)) break;
    if (S.Hash(n - k, n - k + i) == T.Hash(m - 1 - i, m - 1)) pos = n - k;
    rpos[m - 1 - i] = pos;
  }
  int l, r, flag = 0;
  for (int i = 0; i < n - 1; i++)
    if (lpos[i] != -1 && rpos[i + 1] != -1 && lpos[i] < rpos[i + 1]) {
      l = lpos[i] - k + 2;
      r = rpos[i + 1] + 1;
      flag = 1;
      break;
    }
  if (k >= m && !flag) solve(l, r, flag);
  if (flag)
    printf("Yes\n%d %d\n", l, r);
  else
    puts("No");
  return 0;
}
