// {{{ Boilerplate Code <--------------------------------------------------
// vim:filetype=cpp:foldmethod=marker:foldmarker={{{,}}}

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <utility>
#include <vector>

#define FOR(I,A,B) for(int I = (A); I < (B); ++I)
#define ALL(A)     (A).begin(), (A).end()

using namespace std;

// }}}

int main(){
        int N,M,A,B;
        cin>>N>>M>>A>>B;

        vector<string> result;

        FOR(i,0,N){
                result.push_back("");

                FOR(j,0,M){
                        result[i] += '.';
                }
        }
        bool manji = false;

        if (N%2 == 1 && M % 2 == 1 && A >= 2 && B >= 2 && N > 2 && M > 2 && (A%2 != N*(M/2)%2)){
                manji = true;

                result[N-3][M-3] = '<';
                result[N-3][M-2] = '>';
                result[N-3][M-1] = '^';

                result[N-2][M-3] = '^';
                result[N-2][M-2] = '.';
                result[N-2][M-1] = 'v';

                result[N-1][M-3] = 'v';
                result[N-1][M-2] = '<';
                result[N-1][M-1] = '>';

                A-=2;B-=2;

        }
        if (N%2==1){
                int i=0;
                while(A>0 && i<(manji?M-3:(M/2)*2)) {
                        result[N-1][i++]='<';
                        result[N-1][i++]='>';
                        --A;
                }
        }
        if (M%2==1){
                int i=0;
                while(B>0 && i<(manji?N-3:(N/2)*2)) {
                        result[i++][M-1]='^';
                        result[i++][M-1]='v';
                        --B;
                }
        }

        int nn=(N/2)*2;
        int mm=(M/2)*2;

        for (int i=0; i<nn; i+=2) {
                for (int j=0; j<(manji?(i>=N-3?M-3:mm):mm); j+=2){
                        if (A>0) {
                                result[i][j]='<';
                                result[i][j+1]='>';
                                if (--A>0) {
                                        result[i+1][j]='<';
                                        result[i+1][j+1]='>';
                                        --A;
                                }
                        } else {
                                if (B>0) {
                                        result[i][j]='^';
                                        result[i+1][j]='v';
                                        if (--B>0) {
                                                result[i][j+1]='^';
                                                result[i+1][j+1]='v';
                                                --B;
                                        }
                                }
                        }
                }
        }

        if (A+B>0) {
                cout<<"NO"<<endl;
                return 0;
        }

        cout<<"YES"<<endl;
        FOR(i,0,N){
                cout<<result[i]<<endl;
        }
}


Measured memory_bytes: 2304