#define _USE_MATH_DEFINES

#include <iostream>
#include <iomanip>

#include <algorithm>
#include <cmath>

#include <string>
#include <list>
#include <queue>
#include <vector>
#include <complex>
#include <set>

/////////
#define REP(i, x, n) for(int i = x; i < n; i++)
#define rep(i,n) REP(i,0,n)
#define P(p) cout<<(p)<<endl;
/////////
typedef long long LL;
typedef long double LD;
/////////
using namespace::std;
/////////

int main(void){
    std::cin.tie(0); 
    std::ios::sync_with_stdio(false);
    std::cout << std::fixed;//
    //cout << setprecision(6);//
	
	int T,A,B;
	cin>>T>>A>>B;
	//T回連続移動で(A,B)へ
	int min;
	if(A>B){
		min = A;
	}else {
		min = B;
	}
	
	if(T < min){
		P("NO");
		return 0;
	}
	else if( T==1 && A==0 && B==0){
		P("NO");
		return 0;
	}
	P("YES");
	if( (T -min)%2 == 0){
		//if(T==min)
		{
			if(A==B){
				rep(i,min){cout << "^>\n";}//右上
				rep(i,(T-min)/2){
					cout<<"<\n>\n";
				}
			}else if(A>B){
				rep(i,B){cout<<"^>\n";}
				rep(i,A-B){cout<<"^\n";}
				rep(i,(T-min)/2){
					cout<<"<\n>\n";
				}
			}else{//A<B
				rep(i,A){cout<<"^>\n";}
				rep(i,B-A){cout<<">\n";}
				rep(i,(T-min)/2){
					cout<<"<\n>\n";
				}
			}
		}
	}else{//(T -min)%2 == 1)
		{
			if(A==B){
				rep(i,min-1){cout << "^>\n";}
				cout<<"^\n>\n";
				rep(i,(T-min)/2){
					cout<<"<\n>\n";
				}
			}else if(A>B){
				rep(i,B-1){cout<<"^>\n";}
				cout<<">\n^\n";
				rep(i,A-B){cout<<"^\n";}
				rep(i,(T-min)/2){
					cout<<"<\n>\n";
				}
			}else{//A<B
				rep(i,A-1){cout<<"^>\n";}
				cout<<"^\n>\n";
				rep(i,B-A){cout<<">\n";}
				rep(i,(T-min)/2){
					cout<<"<\n>\n";
				}
			}
		}
	}
	
	return 0;
}