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>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const int INF = (int)(1e9 + 1e5);
const long long LINF = (long long)(1e18);
const long long MX = 100500;
const double EPS = 1e-9;
const int MOD = 1000000007;
const int ROOT = 700;
const int PRM_ROOT = 5;
const int LOG = 30;
const int MAXN = 1500000;
int n, m, k;
string s, t;
string s1, s2;
vector<int> pf1, pf2;
int l[MAXN], r[MAXN];
int p1 = -1, p2 = -1;
bool was[MAXN];
void prefix_function(string& s, vector<int>& pf, int k) {
  pf.assign(s.size(), 0);
  for (int i = 1; i < s.size(); ++i) {
    int j = pf[i - 1];
    while (j > 0 && s[i] != s[j]) {
      j = pf[j - 1];
    }
    if (s[i] == s[j]) {
      ++j;
    }
    pf[i] = j;
  }
  for (int i = 1; i < s.size(); ++i) {
    if (pf[i] > k) {
      pf[i] = pf[pf[i] - 1];
    }
    assert(pf[i] <= k);
  }
}
void init() {
  cin >> n >> m >> k;
  cin >> s >> t;
}
void solve() {
  s1 = t + "#" + s;
  s2 = s + "#" + t;
  reverse(s2.begin(), s2.end());
  prefix_function(s1, pf1, k);
  if (m <= k) {
    auto get_pos = [&](int i) { return i + t.size() + 1; };
    for (int i = m - 1; i < s.size(); ++i) {
      int pos = get_pos(i);
      if (pf1[pos] == m) {
        p1 = i - m + 1;
        p2 = p1 + k;
        if (p2 + k > s.size()) {
          int d = p2 + k - s.size();
          p1 -= d;
          p2 -= d;
        }
        return;
      }
    }
  }
  prefix_function(s2, pf2, k);
  {
    memset(l, -1, sizeof(l));
    auto get_pos = [&](int i) { return i + t.size() + 1; };
    for (int i = k - 1; i < s.size(); ++i) {
      int pos = get_pos(i);
      while (pos >= 0 && pf1[pos] >= 0 && l[pf1[pos]] == -1) {
        l[pf1[pos]] = i;
        pos = pf1[pos] - 1;
      }
    }
  }
  {
    memset(r, -1, sizeof(r));
    auto get_pos = [&](int i) { return s.size() - i - 1 + t.size() + 1; };
    for (int i = s.size() - k; i >= 0; --i) {
      int pos = get_pos(i);
      while (pos >= 0 && pf2[pos] >= 0 && r[pf2[pos]] == -1) {
        r[pf2[pos]] = i;
        pos = pf2[pos] - 1;
      }
    }
  }
  for (int l_size = 1; l_size < m; ++l_size) {
    int r_size = m - l_size;
    if (l[l_size] != -1 && r[r_size] != -1 && l[l_size] < r[r_size]) {
      p1 = l[l_size] - k + 1;
      p2 = r[r_size];
      return;
    }
  }
}
void print_answer() {
  ++p1;
  ++p2;
  if (p1) {
    cout << "Yes\n" << p1 << " " << p2 << "\n";
  } else {
    cout << "No\n";
  }
}
void precalc() {}
void run() {
  precalc();
  int t = 1;
  for (int i = 0; i < t; ++i) {
    init();
    solve();
    print_answer();
  }
}
int main() {
  srand(90);
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  run();
  return 0;
}
