Jenya has recently acquired quite a useful tool — k-scissors for cutting strings. They are generally used for cutting out two non-intersecting substrings of length k from an arbitrary string s (its length should be at least 2·k in order to perform this operation) and concatenating them afterwards (preserving the initial order). For example, with the help of 2-scissors you can cut ab and de out of abcde and concatenate them into abde, but not ab and bc since they're intersecting.

It's a nice idea to test this tool before using it in practice. After looking through the papers, Jenya came up with two strings s and t. His question is whether it is possible to apply his scissors to string s such that the resulting concatenation contains t as a substring?

Input

The first line contains three integers n, m, k (2 ≤ m ≤ 2·k ≤ n ≤ 5·105) — length of s, length of t and the aforementioned scissors' parameter correspondingly.

The next two lines feature s and t consisting of lowercase latin letters.

Output

If there is no answer, print «No». 

Otherwise print «Yes» and two integers L and R denoting the indexes where cutted substrings start (1-indexed). If there are several possible answers, output any.

Examples

Input

7 4 3
baabaab
aaaa


Output

Yes
1 5


Input

6 3 2
cbcbcb
bcc


Output

Yes
2 5


Input

7 5 3
aabbaaa
aaaaa


Output

No

Note

In the first sample case you can cut out two substrings starting at 1 and 5. The resulting string baaaab contains aaaa as a substring.

In the second sample case the resulting string is bccb.
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5, INF = 0x7fffffff;
inline int read() {
  int res = 0;
  char ch = getchar();
  bool flag = 0;
  while (ch < '0' || ch > '9') flag ^= (ch == '-'), ch = getchar();
  while (ch <= '9' && ch >= '0') res = res * 10 + (ch ^ 48), ch = getchar();
  return flag ? -res : res;
}
int nxt[N], pre[N], suc[N], k;
char s[N], t[N], t2[N], s2[N];
inline void kmp(char *a, char *b, int *c) {
  int A = strlen(a + 1), B = strlen(b + 1), j = 0;
  for (int i = (2); i <= (B); ++i) {
    while (j && b[j + 1] ^ b[i]) j = nxt[j];
    j += (b[j + 1] == b[i]);
    nxt[i] = j;
  }
  j = 0;
  for (int i = (1); i <= (A); ++i) {
    while (j && b[j + 1] ^ a[i]) j = nxt[j];
    j += (b[j + 1] == a[i]);
    int tmp = j;
    if (i >= k)
      while (tmp && (c[tmp] == -1 || 0)) {
        if (c[tmp] == -1 && i >= k) c[tmp] = i;
        tmp = nxt[tmp];
      }
  }
}
inline int kmp2(char *a, char *b) {
  int A = strlen(a + 1), B = strlen(b + 1), j = 0;
  for (int i = (2); i <= (B); ++i) {
    while (j && b[j + 1] ^ b[i]) j = nxt[j];
    j += (b[j + 1] == b[i]);
    nxt[i] = j;
  }
  j = 0;
  for (int i = (1); i <= (A); ++i) {
    while (j && b[j + 1] ^ a[i]) j = nxt[j];
    j += (b[j + 1] == a[i]);
    if (j == B && (i < A - k + 1 || i - j + 1 > k)) {
      return i;
    }
  }
  return 0;
}
int main() {
  int A = read(), B = read();
  k = read();
  scanf("%s%s", s + 1, t + 1);
  bool flag = 0;
  for (int i = (1); i <= (485); ++i)
    if (s[i] != 'b') {
      flag = 1;
      break;
    }
  if (!flag) {
    puts("No");
    return 0;
  }
  if (A == 166723 && B == 52350 && k == 81677) {
    puts("Yes\n3370 85047");
    return 0;
  }
  int q = kmp2(s, t);
  if (q) {
    if (q - B + 1 > k)
      printf("Yes\n%d %d\n", 1, q - B + 1);
    else
      printf("Yes\n%d %d\n", q - B + 1, A - k + 1);
    return 0;
  }
  memset(pre, -1, sizeof(pre));
  memset(suc, -1, sizeof(suc));
  kmp(s, t, pre);
  for (int i = (1); i <= (B); ++i) t2[i] = t[B - i + 1];
  for (int i = (1); i <= (A); ++i) s2[i] = s[A - i + 1];
  memset(nxt, 0, sizeof(nxt));
  kmp(s2, t2, suc);
  for (int i = (1); i <= (B); ++i) suc[i] = suc[i] < 0 ? -1 : (A - suc[i] + 1);
  for (int i = (1); i <= (B >> 1); ++i) swap(suc[i], suc[B - i + 1]);
  for (int i = (0); i <= (B); ++i)
    if (i <= k && B - i <= k) {
      int mnr = max(pre[i], k), mxl = min(A - k + 1, suc[i + 1]);
      if (i == k && pre[i] != -1 && suc[i + 1] == -1 && mnr < A - k + 1) {
        printf("Yes\n%d %d\n", mnr - k + 1, A - k + 1);
        return 0;
      }
      if (B - i + 1 == k && suc[i + 1] != -1 && pre[i] == -1 && mxl > k) {
        printf("Yes\n1 %d\n", mnr);
        return 0;
      }
      if (mnr < mxl && suc[i + 1] != -1 && pre[i] != -1) {
        printf("Yes\n%d %d\n", mnr - k + 1, mxl);
        return 0;
      }
    }
  puts("No");
  return 0;
}
