// includes {{{
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<tuple>
#include<cmath>
#include<random>
#include<cassert>
// #include<deque>
// #include<multiset>
// #include<bitset>
// #include<cstring>
// #include<bits/stdc++.h>
// }}}
using namespace std;
using ll = long long;

int h, w;
int a, b;

void NO() {
  cout << "NO" << endl;
  exit(0);
}
vector<string> f;
void putV(int i, int j) {
  assert(0 <= i && i + 1 < h);
  assert(0 <= j && j < w);
  f[i][j] = '^';
  f[i+1][j] = 'v';
}
void putH(int i, int j) {
  assert(0 <= i && i < h);
  assert(0 <= j && j + 1 < w);
  f[i][j] = '<';
  f[i][j+1] = '>';
}

void solve() {
  f = vector<string>(h, string(w, '.'));
  if((h & 1) && (w & 1)) {
    // 2パターン
    for(int j = 1; j < w; j += 2) if(a) putH(h - 1, j), a--;
    for(int i = 0; i < h - 1; i += 2) if(b) putV(i, w - 1), b--;
    auto fc = f;
    int ac = a, bc = b;
    // 1 {{{

    for(int i = 0; i < h - 1; i += 2) {
      for(int j = 0; j < w - 1; j += 2) {
        if(a) {
          putH(i, j), a--;
          if(a) putH(i + 1, j), a--;
        } else if(b) {
          putV(i, j), b--;
          if(b) putV(i, j + 1), b--;
        }
      }
    }
    
    if(a <= 0 && b <= 0) return;

    // }}}
    a = ac, b = bc, f = fc;
    // 2 {{{

    if(a) putV(h - 2, 0), a--;
    if(b) putH(h - 3, 0), b--;
    for(int i = 0; i < h - 1; i += 2) {
      for(int j = 0; j < w - 1; j += 2) {
        if(i == h - 3 && j == 0) {
          continue;
        }
        if(a) {
          putH(i, j), a--;
          if(a) putH(i + 1, j), a--;
        } else if(b) {
          putV(i, j), b--;
          if(b) putV(i, j + 1), b--;
        }
      }
    }
    
    if(a <= 0 && b <= 0) return;

    // }}}
    NO();
  } else if(h & 1) {
    // {{{
    for(int j = 0; j < w; j += 2) if(a) putH(h - 1, j), a--;
    for(int i = 0; i < h - 1; i += 2) {
      for(int j = 0; j < w; j += 2) {
        if(a) {
          putH(i, j), a--;
          if(a) putH(i + 1, j), a--;
        } else if(b) {
          putV(i, j), b--;
          if(b) putV(i, j + 1), b--;
        }
      }
    }
    if(a || b) NO();
    // }}}
  } else if(w & 1) {
    // {{{
    for(int i = 0; i < h; i += 2) if(b) putV(i, w - 1), b--;
    for(int i = 0; i < h; i += 2) {
      for(int j = 0; j < w - 1; j += 2) {
        if(a) {
          putH(i, j), a--;
          if(a) putH(i + 1, j), a--;
        } else if(b) {
          putV(i, j), b--;
          if(b) putV(i, j + 1), b--;
        }
      }
    }
    if(a || b) NO();
    // }}}
  } else {
    // {{{
    int hh = h / 2, ww = w / 2;
    int block = hh * ww;
    for(int i = 0; i < h; i+=2) {
      for(int j = 0; j < w; j+=2) {
        if(a) {
          putH(i, j), a--;
          if(a) putH(i + 1, j), a--;
        } else if(b) {
          putV(i, j), b--;
          if(b) putV(i, j + 1), b--;
        }
      }
    }
    if(a || b) NO();
    // }}}
  }
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  // A : horizontal, B : vertical
  cin >> h >> w >> a >> b;
  solve();
  cout << "YES" << "\n";
  for(int i = 0; i < h; i++) cout << f[i] << "\n";
  return 0;
}


Measured memory_bytes: 2304