#include <bits/stdc++.h>
#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)
#define REP(i, n) FOR(i,0,n)
#define IFOR(i, begin, end) for(int i=(end)-1;i>=(begin);i--)
#define IREP(i, n) IFOR(i,0,n)
#define SORT(a) sort(a.begin(), a.end())
#define REVERSE(a) reverse(a.begin(), a.end())
#define int long long
#define INF 1000000000000000
using namespace std;

typedef vector<int> vec;
typedef vector<vec> mat;
typedef pair<int, int> Pii;

template<typename T>
void readvec(vector<T> &a);
void readindex(vector<int> &a);



signed main(){

    int N, M, A, B; cin >> N >> M >> A >> B;
    int a = A, b = B;
    vector<vector<char>> ans(N, vector<char>(M, '.'));
    
    if(N % 2 == 1){
        REP(i, M / 2){
            if(A > 0){
                ans[N - 1][2 * i] = '<';
                ans[N - 1][2 * i + 1] = '>';
                A--;
            }
        }
    }
    if(M % 2 == 1){
        REP(i, N / 2){
            if(B > 0){
                ans[2 * i][M - 1] = '^';
                ans[2 * i + 1][M - 1] = 'v';
                B--;
            }
        }
    }

    REP(i, N / 2){
        REP(j, M / 2){
            if(A >= 2){
                ans[2 * i][2 * j] = '<';
                ans[2 * i][2 * j + 1] = '>';
                ans[2 * i + 1][2 * j] = '<';
                ans[2 * i + 1][2 * j + 1] = '>';
                A -= 2;
            }else if(A == 1){
                ans[2 * i][2 * j] = '<';
                ans[2 * i][2 * j + 1] = '>';
                A--;
            }else if(B >= 2){
                ans[2 * i][2 * j] = '^';
                ans[2 * i + 1][2 * j] = 'v';
                ans[2 * i][2 * j + 1] = '^';
                ans[2 * i + 1][2 * j + 1] = 'v';
                B -= 2;
            }else if(B == 1){
                ans[2 * i][2 * j] = '^';
                ans[2 * i + 1][2 * j] = 'v';
                B--;
            }
        }
    }

    if(N > 1 && M > 1 && N % 2 == 1 && M % 2 == 1 && (A > 0 || B > 0) && a >= 2 && b >= 2){
        A = a;
        B = b;
        ans = vector<vector<char>>(N, vector<char>(M, '.'));
        ans[N - 3][M - 3] = '^';
        ans[N - 2][M - 3] = 'v';
        ans[N - 3][M - 2] = '<';
        ans[N - 3][M - 1] = '>';
        ans[N - 2][M - 1] = '^';
        ans[N - 1][M - 1] = 'v';
        ans[N - 1][M - 3] = '<';
        ans[N - 1][M - 2] = '>';
        A -= 2;
        B -= 2;
        REP(i, M / 2 - 1){
            if(A > 0){
                ans[N - 1][2 * i] = '<';
                ans[N - 1][2 * i + 1] = '>';
                A--;
            }
        }
        REP(i, N / 2 - 1){
            if(B > 0){
                ans[2 * i][M - 1] = '^';
                ans[2 * i + 1][M - 1] = 'v';
                B--;
            }
        }

        REP(i, N / 2){
            REP(j, M / 2){
                if(i == N / 2 - 1 && j == M / 2 - 1) continue;
                if(A >= 2){
                    ans[2 * i][2 * j] = '<';
                    ans[2 * i][2 * j + 1] = '>';
                    ans[2 * i + 1][2 * j] = '<';
                    ans[2 * i + 1][2 * j + 1] = '>';
                    A -= 2;
                }else if(A == 1){
                    ans[2 * i][2 * j] = '<';
                    ans[2 * i][2 * j + 1] = '>';
                    A--;
                }else if(B >= 2){
                    ans[2 * i][2 * j] = '^';
                    ans[2 * i + 1][2 * j] = 'v';
                    ans[2 * i][2 * j + 1] = '^';
                    ans[2 * i + 1][2 * j + 1] = 'v';
                    B -= 2;
                }else if(B == 1){
                    ans[2 * i][2 * j] = '^';
                    ans[2 * i + 1][2 * j] = 'v';
                    B--;
                }
            }
        }
    }

    if(A > 0 || B > 0){
        cout << "NO" << endl;
    }else{
        cout << "YES" << endl;
        REP(i, N){
            REP(j, M) cout << ans[i][j];
            cout << endl;
        }
    }
    
    return 0;
}


template<typename T>
void readvec(vector<T> &a){
    REP(i, a.size()){
        cin >> a[i];
    }
}
void readindex(vector<int> &a){
    REP(i, a.size()){
        cin >> a[i];
        a[i]--;
    }
}

Measured memory_bytes: 2560