#include <iostream>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <fstream>
#include <bitset>
#include <queue>
#include <stack>
#include <deque>
#include <complex>
#include <iomanip>
#include <stdio.h>
#include <string.h>
#include <random>
#include <functional>

using std::cin;
using std::cout;
using std::cerr;
using std::endl;

using std::map;
using std::set;
using std::bitset;
using std::vector;
using std::string;
using std::multimap;
using std::multiset;
using std::deque;
using std::queue;
using std::stack;
using std::pair;
using std::iterator;

using std::sort;
using std::stable_sort;
using std::reverse;
using std::max_element;
using std::min_element;
using std::unique;
using std::ios_base;
using std::swap;
using std::fill;

using std::setprecision;
using std::fixed;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<long long> vl;
typedef string S;

ll min(ll a, ll b) {return a < b ? a : b;}
ll min(int a, ll b) {return a < b ? a : b;}
ll min(ll a, int b) {return a < b ? a : b;}
ll min(int a, int b) {return a < b ? a : b;}

ll max(ll a, ll b) {return a > b ? a : b;}
ll max(int a, ll b) {return a > b ? a : b;}
ll max(ll a, int b) {return a > b ? a : b;}
ll max(int a, int b) {return a > b ? a : b;}

namespace MySpace{

};

#define F(i, n) for (int (i) = 0; (i) != (n); (i)++)
#define fi first
#define se second
#define re return
#define all(x) (x).begin(), (x).end()
#define int long long

#define double long double
#define y0 abra

const int N = 5949;
const int INF = N * N;

int n, m, a, b;
string ans[N];

int work()
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (ans[i][j] == '^')
            {
                if (b == 0)
                {
                    ans[i][j] = '.';
                    ans[i + 1][j] = '.';
                }
                else
                    b--;
            }
            if (ans[i][j] == '<')
            {
                if (a == 0)
                {
                    ans[i][j] = '.';
                    ans[i][j + 1] = '.';
                }
                else
                    a--;
            }
        }
    }
    //*/
    cout << "YES\n";
    for (int i = 0; i < n; i++) cout << ans[i] << "\n";
    exit(0);
}

int T = 0;

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    if (T == 0) cin >> n >> m >> a >> b;
    if (T == 1) n = 2, m = 4, a = 1, b = 1;
    int hor = n * (m / 2);
    int ver = m * (n / 2);
    if (a > hor || b > ver || a + b > n * m / 2)
    {
        cout << "NO";
        return 0;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            ans[i] += ".";
        }
    }
    if (n * m % 2 == 1)
    {
        int c = a, d = b;
        while (c < hor && c + d + 1 <= n * m / 2)
        {
            c++;
        }
        for (int i = 0; i < n - 1; i += 2)
        {
            if (d)
            {
                d--;
                ans[i][m - 1] = '^';
                ans[i + 1][m - 1] = 'v';
            }
        }
        for (int j = 0; j < m - 1; j += 2)
        {
            if (c)
            {
                c--;
                ans[n - 1][j] = '<';
                ans[n - 1][j + 1] = '>';
            }
        }
        int s = (n - 1) * (m - 1);
        if (c + d == s / 2)
        {
            if (d % 2 == 1)
            {
                ans[n - 2][m - 1] = '^';
                ans[n - 1][m - 1] = 'v';
                ans[n - 3][m - 2] = '<';
                ans[n - 3][m - 1] = '>';
                c--;
                ans[n - 3][m - 3] = '^';
                ans[n - 2][m - 3] = 'v';
                d--;
            }
        }
        for (int i = 0; i < n - 1; i += 2)
        {
            for (int j = 0; j < m - 1; j += 2)
            {
                if (c)
                {
                    ans[i][j] = '<';
                    ans[i][j + 1] = '>';
                    ans[i + 1][j] = '<';
                    ans[i + 1][j + 1] = '>';
                    c -= 2;
                }
                else if (d)
                {
                    ans[i][j] = '^';
                    ans[i][j + 1] = '^';
                    ans[i + 1][j] = 'v';
                    ans[i + 1][j + 1] = 'v';
                    d -= 2;
                }
            }
        }
        work();
    }
    int fl1 = 0, fl2 = 0;
    if (n % 2 == 1)
    {
        n--;
        fl1++;
        for (int i = 0; i + 1 < m; i += 2)
        {
            ans[n][i] = '<';
            ans[n][i + 1] = '>';
            a--;
        }
    }
    if (m % 2 == 1)
    {
        m--;
        fl2++;
        for (int i = 0; i + 1 < n; i += 2)
        {
            ans[i][m] = '^';
            ans[i + 1][m] = 'v';
            b--;
        }
    }
    if (n % 2 == 0 && m % 2 == 0)
    {
        if (a + b == n * m / 2 && a % 2 == 1)
        {
            cout << "NO";
            return 0;
        }
        int c = a, d = b;
        if (d % 2 == 1)
            d++;
        while (c + d + 1 <= n * m / 2)
            c++;
        for (int i = 0; i < n; i += 2)
        {
            for (int j = 0; j < m; j += 2)
            {
                if (c)
                {
                    ans[i][j] = '<';
                    ans[i][j + 1] = '>';
                    ans[i + 1][j] = '<';
                    ans[i + 1][j + 1] = '>';
                    c -= 2;
                }
                else if (d)
                {
                    ans[i][j] = '^';
                    ans[i][j + 1] = '^';
                    ans[i + 1][j] = 'v';
                    ans[i + 1][j + 1] = 'v';
                    d -= 2;
                }
            }
        }
        if (fl1) n++, a += m / 2;
        if (fl2) m++, b += n / 2;
        work();
    }
    return 1;
}


Measured memory_bytes: 2304